วิธีที่ง่ายที่สุดในการแบ่งปันข้อมูลระหว่างเธรดต่างๆมีshared data
ดังนี้ (บางส่วนเป็นรหัสหลอก):
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;
}
}
คุณสามารถอ่านเกี่ยวกับวิธีการนี้ได้ในคำแนะนำที่ดีเกี่ยวกับมัลติเธรดอย่างไรก็ตามฉันต้องการอ่านเกี่ยวกับเรื่องนี้O'Reilly book C# 3.0 in a nutshell
โดยพี่น้อง Albahari (2007) ซึ่งสามารถเข้าถึงได้อย่างอิสระบน Google หนังสือเช่นเดียวกับหนังสือรุ่นใหม่กว่า เพราะมันยังครอบคลุมการรวมเธรดเบื้องหน้าและเธรดพื้นหลัง ฯลฯ ด้วยโค้ดตัวอย่างที่ดีและเรียบง่าย (ข้อจำกัดความรับผิดชอบ: ฉันเป็นเจ้าของสำเนาหนังสือเล่มนี้ที่ชำรุด)
ในกรณีที่คุณกำลังสร้างแอปพลิเคชัน WinForms การใช้ข้อมูลที่แชร์จะมีประโยชน์อย่างยิ่งเนื่องจากตัวควบคุม WinForm ไม่ปลอดภัยต่อเธรด การใช้การโทรกลับเพื่อส่งข้อมูลจากเธรดของผู้ปฏิบัติงานกลับไปยังการควบคุม WinForm เธรด UI หลักต้องใช้รหัสที่น่าเกลียดInvoke()
เพื่อให้เธรดการควบคุมปลอดภัย การใช้ข้อมูลร่วมกันแทนและเธรดเดียวSystem.Windows.Forms.Timer
กับระยะสั้นInterval
ของการพูด 0.2 Invoke
วินาทีคุณสามารถส่งข้อมูลจากด้ายคนที่จะควบคุมได้โดยไม่ต้อง