[英]ThreadPool.QueueUserWorkItem Error when run method in separate thread in c# 2.0
我有一個代碼可以通過線程調用任何方法。
System.Threading.ThreadPool.QueueUserWorkItem(Export());
在這里,我嘗試通過線程運行Export()方法,並得到編譯錯誤。 代碼有什么問題。 我正在使用C#2.0版本。 請幫忙。
QueueUserWorkItem
需要一個委托,但是您正在調用Export
方法,然后嘗試將Export
的結果傳遞給QueueUserWorkItem
方法。 換句話說,就好像您正在跑步:
var result = Export();
ThreadPool.QueueUserWorkItem(result);
顯然,這不會在另一個線程中運行Export
...
假設Export
方法的簽名正確,則只需將其從方法調用更改為方法組轉換:
ThreadPool.QueueUserWorkItem(Export);
編輯:如果需要給Export方法提供參數,最簡單的方法是使用lambda表達式(假設您使用的是C#3)。 例如:
ThreadPool.QueueUserWorkItem(state => Export(filename));
方法Export
是否返回類型為WaitCallback
的委托? 如果不是,那么您正在為QueueUserWorkItem
提供錯誤的參數。 為了清楚起見,您需要提供符合以下簽名的委托:
public delegate void WaitCallback(
Object state
)
因此,方法Export
應該具有以下簽名:
public void Export(object state)
並按以下方式提供給QueueUserWorkItem
:
ThreadPool.QueueUserWorkItem(Export)
或者,如果Export
的簽名不同,則可以使用中間委托來調用它:
ThreadPool.QueueUserWorkItem(state=>Export())
或者,如果Export
需要參數,則可以:
ThreadPool.QueueUserWorkItem(state=>Export(some,parameters))
您可能必須編寫ThreadPool.QueueUserWorkItem(new WaitCallback(Export))
並修改export以具有object類型的單個參數,即:
Export(object state)
{
......
}
狀態是一個參數,您可以在調用QueueUserWorkItem()
時將其傳遞給回調函數
提供Export
匹配要提供給QueueUserWorkItem
的委托,請執行以下操作:
ThreadPool.QueueUserWorkItem(Export);
通過用括號編寫Export()
,您將調用該方法,而不是傳遞給QueueUserWorkItem
在單獨的線程上被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.