2012-01-14 46 views

Trả lời

36

Không chỉ ThreadStart mong đợi các phương thức trống, nó cũng mong đợi họ không thực hiện bất kỳ đối số nào! Bạn có thể bọc nó trong một lambda, một đại biểu ẩn danh, hoặc một hàm tĩnh có tên.

Dưới đây là một cách để làm việc đó:

string res = null; 
Thread newThread = new Thread(() => {res = sayHello("world!");}); 
newThread.Start(); 
newThread.Join(1000); 
Console.Writeline(res); 

Dưới đây là một cú pháp:

Thread newThread = new Thread(delegate() {sayHello("world!");}); 
newThread.Start(); 

Cú pháp thứ ba (với một hàm có tên) là nhàm chán nhất:

// Define a "wrapper" function 
static void WrapSayHello() { 
    sayHello("world!); 
} 

// Call it from some other place 
Thread newThread = new Thread(WrapSayHello); 
newThread.Start(); 
+0

Nó đã được hữu ích cho tôi. Cảm ơn bạn. –

+0

Tôi không thể nhận được giá trị trả lại. Làm thế nào có thể sử dụng giá trị trả về? –

+1

[ParameterizedThreadStart Delegate] (http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx) –

3

Bạn nên sử dụng Task cho mục đích đó.

0

Nếu bạn có thể sử dụng bất kỳ phương pháp phân luồng, hãy thử BackgroundWorker:

BackgroundWorker bw = new BackgroundWorker(); 
public Form1() 
{ 
    InitializeComponent(); 

    bw.DoWork += bw_DoWork; 
    bw.RunWorkerCompleted += bw_RunWorkerCompleted; 
    bw.RunWorkerAsync("MyName"); 
} 

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    Text = (string)e.Result; 
} 

void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string name = (string)e.Argument; 
    e.Result = "Hello ," + name; 
} 
Các vấn đề liên quan