विभिन्न थ्रेड्स के बीच डेटा साझा करने की सबसे सरल विधि 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
किया, भाइयों में अल्बहारी (2007), जो Google पुस्तक पर भी स्वतंत्र रूप से उपलब्ध है, जैसे कि पुस्तक का नया संस्करण, क्योंकि इसमें थ्रेड पूलिंग, फोरग्राउंड बनाम बैकग्राउंड थ्रेड्स आदि भी शामिल हैं, जिनमें अच्छे और सरल उदाहरण कोड हैं। (डिस्क्लेमर: इस पुस्तक की मैं एक घिसी-पिटी कॉपी हूं)
यदि आप WinForms एप्लिकेशन बना रहे हैं, तो साझा डेटा का उपयोग विशेष रूप से आसान है, क्योंकि WinForm नियंत्रण थ्रेड-सुरक्षित नहीं हैं। कार्यकर्ता थ्रेड से वापस WinForm पर डेटा पास करने के लिए कॉलबैक का उपयोग करके Invoke()
उस नियंत्रण थ्रेड को सुरक्षित बनाने के लिए मुख्य UI थ्रेड के साथ बदसूरत कोड की आवश्यकता होती है । इसके बजाय साझा किए गए डेटा का उपयोग करना, और एकल-थ्रेडेड System.Windows.Forms.Timer
, Interval
0.2 सेकंड के कम कहने के साथ , आप आसानी से कार्यकर्ता थ्रेड से नियंत्रण के बिना जानकारी भेज सकते हैं Invoke
।