.NET Framework
सिंक्रोनाइज़ेशन कॉन्टेक्ट्स
खोज…
टिप्पणियों
एक सिंक्रनाइज़ेशन संदर्भ एक अमूर्तता है जो किसी शेड्यूलर को काम की इकाइयों को पास करने के लिए कोड को उपभोग करने की अनुमति देता है, बिना इस बात की जागरूकता की आवश्यकता के कि काम कैसे निर्धारित किया जाएगा।
सिंक्रनाइज़ेशन संदर्भों का उपयोग पारंपरिक रूप से यह सुनिश्चित करने के लिए किया जाता है कि कोड एक विशिष्ट धागे पर चलाया जाता है। WPF और Winforms अनुप्रयोगों में, यूआई थ्रेड का प्रतिनिधित्व करने वाला एक SynchronizationContext
कॉन्टेक्स्ट प्रस्तुति फ्रेमवर्क द्वारा प्रदान किया जाता है। इस तरह से SynchronizationContext
को प्रतिनिधियों के लिए निर्माता-उपभोक्ता पैटर्न के रूप में सोचा जा सकता है। एक कार्यकर्ता धागा निष्पादन योग्य कोड (प्रतिनिधि) का उत्पादन करेगा और इसे यूआई संदेश लूप द्वारा खपत करेगा।
टास्क समानांतर लाइब्रेरी स्वचालित रूप से कैप्चर और सिंक्रनाइज़ेशन संदर्भों का उपयोग करने के लिए सुविधाएँ प्रदान करती है।
पृष्ठभूमि कार्य करने के बाद UI थ्रेड पर निष्पादित कोड
यह उदाहरण दिखाता है कि SynchronizationContext
का उपयोग करके पृष्ठभूमि के धागे से UI घटक कैसे अपडेट किया जाए
void Button_Click(object sender, EventArgs args)
{
SynchronizationContext context = SynchronizationContext.Current;
Task.Run(() =>
{
for(int i = 0; i < 10; i++)
{
Thread.Sleep(500); //simulate work being done
context.Post(ShowProgress, "Work complete on item " + i);
}
}
}
void UpdateCallback(object state)
{
// UI can be safely updated as this method is only called from the UI thread
this.MyTextBox.Text = state as string;
}
इस उदाहरण में, यदि आपने MyTextBox.Text
for
लूप के for
सीधे अपडेट करने का प्रयास किया है, तो आपको एक थ्रेडिंग त्रुटि मिलेगी। UpdateCallback
क्रिया को SynchronizationContext
पोस्ट करके, टेक्स्ट बॉक्स को शेष UI के समान थ्रेड पर अद्यतन किया जाता है।
व्यवहार में, System.IProgress<T>
उदाहरण का उपयोग करके प्रगति अपडेट किया जाना चाहिए। डिफ़ॉल्ट कार्यान्वयन System.Progress<T>
स्वचालित रूप से उस पर बनाए गए सिंक्रनाइज़ेशन संदर्भ को कैप्चर करता है।