簡體   English   中英

ThreadPool.QueueUserWorkItem在c#2.0中的單獨線程中運行方法時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM