2012-07-10 72 views
1

好了,所以我用這行代碼項目線程錯誤在C#

System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ProcessReport)); 

,但它拋出以下錯誤

無過載爲「ProcessReport」匹配委託「系統。 Threading.WaitCallback

我替換爲以下行上述線:

Thread t = new Thread(new ThreadStart(ProcessReport)); 
t.Start(); 

這消除了錯誤,但這是正確的做法。由於我是公司的實習生,所以我無法在那裏查看輸出結果,這是整個大型項目的一部分。請幫忙。

我不能發佈整個ProcessReport因爲我不允許,但它始於此:

公共無效ProcessReport()

+6

請發佈您的ProcessReport的定義。它應該匹配這個委託定義:public delegate void WaitCallback( \t Object state ) – Nik 2012-07-10 17:45:04

+6

ProcessReport的簽名是什麼樣的?它應該看起來像'void ProcessReport(object state)' – vcsjones 2012-07-10 17:45:19

回答

4

我的假設是,由於這個編譯:

new ThreadStart(ProcessReport) 

您的ProcessReport方法看起來是這樣的:

void ProcessReport() 
{ 
} 

QueueUserWorkItem需要WaitCallback委託,這需要經過一個單一的對象作爲參數。所以改變你的方法的簽名看起來像這樣:

void ProcessReport(object state) 
{ 
} 

你應該沒問題。 state參數如果您不需要使用它可以忽略,但它的值是您通過QueueUserWorkItem的第二個參數傳入的任何值。由於您正在使用不會將對象傳遞到QueueUserWorkItem的重載,它將始終爲空。

+0

hmmm。我會試試看。非常感謝這麼快的回覆 – Mayank 2012-07-10 18:19:02

0

一個可與

線程t =新主題發生可能的問題(新的ThreadStart(ProcessReport));

t.Start();

是,如果你以這種方式啓動這麼多線程,不檢查任何條件,你的計劃很可能在某些情況下崩潰,甚至系統。但是,如果它是一個應用程序,該事件必須在該線程啓動之前發生,那麼您的代碼應該沒問題。

+0

thanx的信息。 – Mayank 2012-07-10 18:19:58