Biên tp: thienthanit@yahoo.com Ngun: 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 gtrđược trả về thì
phải làm thế nào. Với ThreadStart thì chắc chắn không thể, với do tham số của ThreadStart phải phương
thức (hàm) không có giá trị trvề... Dưới đây là một ví dụ sử dụng delegate một cách trực tiếp, bạnthể làm mi
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 tp: thienthanit@yahoo.com Ngun: Internet
Giả sử bản thân Thread t trong phiên bản winform 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