खोज…


टिप्पणियों

एक सिंक्रनाइज़ेशन संदर्भ एक अमूर्तता है जो किसी शेड्यूलर को काम की इकाइयों को पास करने के लिए कोड को उपभोग करने की अनुमति देता है, बिना इस बात की जागरूकता की आवश्यकता के कि काम कैसे निर्धारित किया जाएगा।

सिंक्रनाइज़ेशन संदर्भों का उपयोग पारंपरिक रूप से यह सुनिश्चित करने के लिए किया जाता है कि कोड एक विशिष्ट धागे पर चलाया जाता है। 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> स्वचालित रूप से उस पर बनाए गए सिंक्रनाइज़ेशन संदर्भ को कैप्चर करता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow