2012-07-10 94 views
1

因此,我試圖將參數傳遞給我想要參與多線程的方法。所以,我寫的代碼看起來像這樣:將參數傳遞給多線程時的方法

new Thread (Go(ineedthis)).Start(); 
    Go(); 

    static void Go(string ineedthis) 
    { 
    lock (locker) 
    { 
     if (!done) { Console.WriteLine ("Done"); done = true; } 
    } 
    } 

但是,我不能傳遞參數ineedthis,因爲它會給當您插入它像我在第一線做了一個錯誤。相反,如果在爲該方法創建線程時沒有提供參數,則它也會給出錯誤。

那麼,在創建線程時如何將參數傳遞給方法?

謝謝! 注:我剛剛開始c#昨天,所以我完全不熟悉這一點。請解釋清楚,讓我從中得到更多!

編輯 - 錯誤:

Error 1 The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' has some invalid arguments  23 21 test 


Error 2 Argument 1: cannot convert from 'method group' to 'System.Threading.ParameterizedThreadStart' 23 32 test 
+0

你得到的錯誤信息是什麼? – 2012-07-10 19:06:56

+0

現在發帖,謝謝! – Jakexx360 2012-07-10 19:07:19

+0

http://stackoverflow.com/q/3360555 – 2012-07-10 19:07:54

回答

3

我認爲你正在尋找的東西更多的是這樣的:

var t = new Thread (Go); 
t.Start(ineedthis); 

首先創建一個線程,詳細說明了該方法將在後臺運行時線。然後開始線程,根據需要傳入任何參數。有關更多信息,請參閱MSDN

+0

沒有工作,錯誤與上面發佈的相同。第二行沒有扔任何東西,第一行生氣 – Jakexx360 2012-07-10 19:10:18

+1

改變你的Go方法是Go(object ineedthis) – Josh 2012-07-10 19:14:21

+0

工作得很好。謝謝 – Jakexx360 2012-07-10 19:54:41

1

你需要一個ParameterizedThreadStart代表:

new Thread (Go).Start(ineedthis); 

和方法簽名必須object ineedthis,不string ineedthis

static void Go(object ineedthis) 
{ 
    string data = (string)ineedthis; 
    lock (locker) 
    { 
    if (!done) { Console.WriteLine ("Done"); done = true; } 
    } 
} 
0

這也應該工作:

new Thread (() => Go(ineedthis)).Start(); 

一個包裝了0參數的lambda是分配給一個ThreadStart裏面的方法調用。

0
Thread workerThread = new Thread (() => go("example")); 
    workerThread.Start();