Phương pháp đơn giản nhất để chia sẻ dữ liệu giữa các luồng khác nhau shared data
như sau (một số là mã giả):
class MyThread
{
public string SharedData;
public void Worker()
{
...lengthy action, infinite loop, etc...
SharedData = "whatever";
...lengthy action...
return;
}
}
class Program
{
static void Main()
{
MyThread m = new MyThread();
Thread WorkerThread = new Thread(m.Worker);
WorkerThread.Start();
loop//or e.g. a Timer thread
{
f(m.SharedData);
}
return;
}
}
Bạn có thể đọc về phương pháp này trong phần giới thiệu hay về đa luồng này , tuy nhiên, tôi thích đọc về phương pháp này trong O'Reilly book C# 3.0 in a nutshell
, của anh em Albahari (2007), cũng có thể truy cập miễn phí trên Google Sách, giống như phiên bản mới hơn của sách, bởi vì nó cũng bao gồm gộp luồng, luồng nền trước so với nền sau, v.v., với mã ví dụ đẹp và đơn giản. (Tuyên bố từ chối trách nhiệm: Tôi sở hữu một bản sao cũ của cuốn sách này)
Trong trường hợp bạn đang tạo một ứng dụng WinForms, việc sử dụng dữ liệu được chia sẻ đặc biệt hữu ích, vì các điều khiển WinForm không an toàn theo luồng. Sử dụng lệnh gọi lại để chuyển dữ liệu từ chuỗi công nhân trở lại điều khiển WinForm, chuỗi giao diện người dùng chính cần có mã xấu Invoke()
để làm cho chuỗi điều khiển đó an toàn. Thay vào đó, sử dụng dữ liệu được chia sẻ và luồng đơn System.Windows.Forms.Timer
, chỉ với Interval
0,2 giây, bạn có thể dễ dàng gửi thông tin từ luồng công nhân tới bộ điều khiển mà không cần Invoke
.