2015-02-09 107 views
-1

好日子創建方法線程,在未引用的DLL C#

我的目標是創建一個程序(Windows服務,ATM它只是一個控制檯應用程序)在C#中使用的.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:不能隱式轉換類型「無效」以CallSite.Target「對象」(閉合,調用點,對象)在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRET](調用點站點,T 0爲arg0)在testService.Program.Main()在C:... \ Program.cs的:線85

我知道有不同的方式來使用未引用的DLL,但創建一個線程的方法在這些DLL之一是什麼我正在苦苦掙扎。

任何幫助表示讚賞,
問候
傑夫

+0

只是W¯¯在你自己的方法中聲明'instance.cWrite'。 – Chris 2015-02-09 14:34:30

回答

1

可以簡單:Thread t1 = new Thread(() => instance.cWrite());作爲Thread構造函數需要一個代表,而你是經過cWrite()的結果(這是void),以它來調用。

+0

謝謝,正是我所需要的。 – JeffTheBall 2015-02-10 13:02:17

0

爲什麼不使用MEF?您可以設置.dll的搜索目錄,然後將您想要的任何.dll放在那裏。你需要在你的代碼中包含的唯一東西就是當你使用這個對象時的接口。

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

例通用接口需要導出和導入:

interface IMyMEFExample 
{ 
    public string HelloFromMEF(); 
} 

舉例出口類:MEF消費

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

例子:

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

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