2011-10-02 58 views
0

發送的參數 由一個線程在C#中叫功能,這是我的代碼:將參數發送給C#中的線程調用的函數?

myThread = new Thread(new ThreadStart(myfunc)); 
myThread.Start(i); 

public void myfunc(int i) 
{ 
    ... 
} 

我得到錯誤:

No overload for 'installDrivers' matches delegate 'system.Threading.ThredStart'

+0

.NET的哪個版本? – Tormod

回答

0

使用本:

myThread = new Thread(new ParameterizedThreadStart(myfunc)); 
myThread.Start(i); 

public void myfunc(object i) {... } 

它可能對你的問題有用

+0

sari - 'bool [] arrBool =(bool [])o;'其中'o'是函數參數。 –

+0

@ShadowWizard - 謝謝 - 它工作正常 –

2

你可以使用ParameterizedThreadStart

Thread myThread = new Thread(new ParameterizedThreadStart(myfunc)); 
myThread.Start(i); 

而且你的函數

public void myfunc(object i) 
{ 
    int myInt = Convert.ToInt32(i); 
} 
+0

正確的答案,但任何使用'Convert.ToInt32'而不是簡單的'int myInt =(int)i;'的原因? –

+0

我的參數是布爾數組,我如何將它們從對象轉換爲布爾數組? –

1

另一種選擇,利用lambda表達式可以很容易地調用函數與任意數量的參數,它也避免了object的一個參數情況相當惡劣的轉換:

int paramA = 1; 
string paramB = "foo"; 

var myThread = new Thread(() => SomeFunc(paramA, paramB)); 
myThread.Start(); 

public void SomeFunc(int paramA, string paramB) 
{ 
    // Do something... 
} 
0

除非您使用C#< 2.0,否則不需要創建委託。您可以讓編譯器爲您隱式創建它。

myThread = new Thread(myfunc); 
myThread.Start(i); 

public void myfunc(object i) 
{ 
    int i2 = (int)i; // if i is an int 
} 

但要注意的是,Thread構造函數只接受兩種代表:一個是參(ThreadStart)和一個接受的object參數(ParameterizedThreadStart)。所以我們在這裏使用第二個。

相關問題