
Biên tập: thienthanit@yahoo.com Nguồn: Internet
Nếu bạn áp đặt đa luồng vào trong ứng dụng đa luồng, giả sử bạn muốn nhận một hay nhiều giá trị được trả về thì
phải làm thế nào. Với ThreadStart thì chắc chắn là không thể, với lý do tham số của ThreadStart phải là phương
thức (hàm) không có giá trị trả về... Dưới đây là một ví dụ sử dụng delegate một cách trực tiếp, bạn có thể làm mọi
thứ ở trong này (không biết là có đúng không, vì chưa bị teo bao giờ :D)
private int DoSomething()
{
return 5;
}
int x = 0; // biến sẽ lưu giá trị trả về
private void DoSomething_Click(object sender, EventArgs e)
{
Thread t= new Thread(delegate()
{
x = DoSomething();
});
t.Start();
t.Join(); // Chờ thread làm xong thì đồng bộ với luồng chính
tbResult.Text = x.ToString();
}
}
Phiên bản Console:
class Program
{
private static int DoSomething()
{
return 5;
}
static int x = 0;
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(x.ToString());
Thread t= new Thread(delegate()
{
x = DoSomething();
});
t.Start();
t.Join(); // Chờ thread thực hiện xong công việc rồi đồng bộ
Console.WriteLine(x.ToString());
Console.Read();
}
}

Biên tập: thienthanit@yahoo.com Nguồn: Internet
Giả sử bản thân Thread t trong phiên bản winform có tác động làm, hay đang cố thay đổi một thuộc tính nào đó
trong Form đã gọi nó, thì bạn cần phải chú ý các thao tác đồng bộ với nó. Bằng phương thức BeginInvoke() của
Form. Nếu không, nó có thể báo lỗi

