2011-12-29 154 views
0

我想爲一個簡單的方法啓動一個新的線程,但該方法有我需要通過它的變量。C#線程啓動錯誤

Thread tempmovethread = new Thread(new ThreadStart(widget.moveXYZINCHES(xval,yval,zval)); 

我收到錯誤:「方法名稱預計」。

這是正確的方法的名字,我沒有與此非常相似的代碼更早一點的東西,它的工作,唯一的區別就是我所謂的方法之前didnt需要傳遞的任何變量:

executethread = new Thread(new ThreadStart(execute.RunRecipe)); 

是否有可能啓動一個新線程並傳遞這樣的變量,還是必須以另一種方式進行操作?

回答

3

使用操作來建立正確的委託類型

012。
Thread tempmovethreading = new Thread(new ThreadStart(new Action(() => widget.moveXYZINCHES(xval,yval,zval))); 
+0

的答案喜歡它,美麗! +1但會警告「訪問修改的關閉」? – 2011-12-29 17:52:34

+0

謝謝你完美的作品! – kenetik 2011-12-29 17:55:34

3

tempmovethread =新主題(新ParametrizedThreadStart(widget.moveXYZINCHES); tempmovethread.Start(新[] {XVAL,利用yval,的zval});

BUT

你應該適當地改變這樣的方法的簽名(假設使用的參數都是int類型:

public void moveXYZINCHES(object state) 
{ 
    int xval = (state as int[])[0],yval = (state as int[])[1],zval = (state as int[])[2]; 
    ...your code 
} 
+0

好吧,我明白了第一部分,但在你的「but」聲明之後,我得到了一點遺失......我不太熟悉C#中的命令,爲什麼我需要這樣做? – kenetik 2011-12-29 17:49:41

+0

,因爲ParametrizedThreadStart只接受具有特定參數集的函數 - 只有f(對象狀態),因此您必須將參數包裝到單個對象中以將它們傳遞到線程的函數中。但我真的很喜歡@Bob Vale的行動使用 – 2011-12-29 17:51:54