2012-10-01 57 views
2

我想通過使用system.dynamic在運行時創建一個類的動態實例。並將其傳遞給線程池來執行它。但是,我收到一個錯誤,說該類中的方法被用作屬性。以下是代碼。C#創建動態類並在線程池中使用它

Type t = Type.GetType("clsCountrySelectInsertUpdate_TEST"); 
dynamic dd = Activator.CreateInstance(t, null); 
dd.intMode = 203; 
ThreadPool.QueueUserWorkItem(new WaitCallback(dd.CountrySelectInsertUpdate)); 

我試圖調用線程池下面的方法爲好,但有一個錯誤,指出返回類型爲void不能從方法CountrySelectInsertUpdate轉換。

ThreadPool.QueueUserWorkItem(new WaitCallback(dd.CountrySelectInsertUpdate()),null); 

方法CountrySelectInsertUpdate()不帶參數並返回一個void。

任何幫助將非常appericated

回答

0

WaitCallback需要的狀態。你可以很容易地使用lambda來寫:

ThreadPool.QueueUserWorkItem(new WaitCallback(state => dd.CountrySelectInsertUpdate()), null); 

話雖這麼說,你已經在使用.NET 4,我建議你使用第三方物流來代替。它提供了一般一個更好的線程模型比ThreadPool.QueueUserWorkItem,特別是如果你以後需要得到的結果(或處理異常):

Task.Factory.StartNew(() => dd.CountrySelectInsertUpdate()); 
+0

你好,非常感謝它的工作。 –

+0

@PSJameelAhamed在這種情況下,您應該將其標記爲答案。請參閱:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –