在未引用的DLL C#中为方法创建线程

时间:2015-02-09 14:20:28

标签: c# .net multithreading dll

美好的一天,

我的目标是在C#中创建一个程序(Windows服务,它只是一个控制台应用程序),它使用未引用的.dll,并为.dll中的方法创建线程。

换句话说:我想创建一个程序来启动未知.dll的

方法的线程

例如,我的.dll名为testdll.dll,其中包含方法cWrite() 使用我的主程序,我想为cWrite()创建一个线程,但是没有引用.dll。

目前我的代码如下:

var assembly = Assembly.LoadFrom("testdll.dll");
var aClass = assembly.GetType("testdll.Class1");
dynamic instance = Activator.CreateInstance(aClass);

Thread t1 = new Thread(instance.cWrite());

我收到错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRet]的CallSite.Target(Closure,CallSite,Object)中将类型'void'隐式转换为'object'(CallSite站点,T 0 arg0 )在C:... \ Program.cs:第85行的testService.Program.Main()中

我知道有多种方法可以使用未引用的dll,但是在其中一个dll中为方法创建一个线程就是我正在努力的方法。

感谢任何帮助,
问候
杰夫

2 个答案:

答案 0 :(得分:1)

您可以简单地:Thread t1 = new Thread(() => instance.cWrite());作为Thread构造函数需要委托才能在将cWrite()void)的结果传递给它时进行调用。

答案 1 :(得分:0)

为什么不使用MEF?您可以设置.dlls的搜索目录,然后将任何.dll放在那里。您需要在代码中包含的唯一内容是使用对象时的界面。

https://msdn.microsoft.com/en-us/library/dd460648(v=vs.110).aspx

导出和导入所需的公共接口示例:

interface IMyMEFExample
{
    public string HelloFromMEF();
}

示例导出的类:

[Export(typeof(IMyMEFExample))]
public class MyExportedMEFClass : IMyMEFExample
{
    public string HelloFromMEF()
    {
        return "Hello from MEF!";
    }
}

MEF消费示例:

class ImportMEFExample
{
    [Import(typeof(IMyMEFExample))]
    private IMyMEFExample importedMEF;

    public ImportMEFExample()
    {
        Console.WriteLine(importedMEF.HelloFromMEF());
    }
}