我已經研究了這一點,並且無法建立正確的方法。我的問題如下所示:我有一個winForms應用程序,並且在其中我希望啓動一個時間敏感的.dll。我能做到這一點使用的System.Reflection沒有問題,像這樣的如何從運行時啓動的.dll內啓動Windows窗體
// Execute the method from the requested .dll using reflection (System.Reflection).
//[System.Runtime.InteropServices.DllImport(strDllPath)]
DLL = Assembly.LoadFrom(strDllPath);
classType = DLL.GetType(String.Format("{0}.{0}", ListUfCmdParams[1]));
classInst = Activator.CreateInstance(classType);
XmlExpInfo = classType.GetMethod(DllParams[0]);
XmlExpInfo.Invoke(classInst, paramObj);
// Return something.
return String.Format("Method '{0}' from '{1}{2}' successfully executed!",
ListUfCmdParams[2], ListUfCmdParams[1], strDotDll);
這個偉大的工程,但被調用的過程是如此耗費時間我想顯示對所發生的事情的用戶。爲此,我在.dll文件中包含了一個WinForm,它有一個progressBar和一些其他屬性。當我這樣做,我得到一個例外。當「Activator.CreateInstance()」嘗試工作時會發生這種情況:MissingMethodException「無法創建抽象類」。在使用部分類之前,我遇到過這個錯誤,而且我不得不從我的類中刪除「partial」關鍵字以使得.dll能夠正確執行(我剛剛擺脫了這個錯誤!)。我無法從上面的winForms類中刪除這個「partial」關鍵字,所以問題是「如何從我的.dll中調用winForm(如果確實有可能)?」這樣.dll可以顯示從調用應用程序執行的進度?
感謝您的時間,
尼克
詩篇。我已閱讀下列線程和他們有點含糊:
A DLL with WinForms that can be launched from A main app
等。
鑑於您可以更改dll中的方法接口,難道您不能僅將一個進度條作爲參數傳遞給您上面的代碼調用的方法嗎? – Christian
它與* partial *關鍵字沒有任何關係。首先通過*而不是*使用反射來工作。然後考慮保持這種方式。 –
這聽起來像是一種合理的方法,但這不適合我的需求。這必須爲通用的.dll工作,這將使調用者太具體。我明白,「抽象類」與「部分類」聲明沒有任何關係。然而,「partial」關鍵字就是編譯器大喊大叫,爲了讓我的.dll被正確調用而必須刪除的東西。我會爲「不使用反射」,但我不famailar如何做到這一點管理的.dll;即使用.NET下的C#創建.dll。我以爲你只能使用'System.Relection'來做到這一點。 – MoonKnight