मैं सिर्फ इस कोड लिखा है:मेरे Winforms एप्लिकेशन में सिंक्रनाइज़ेशन कॉन्टेक्स्ट.क्यूरेंट नल क्यों है?
System.Threading.SynchronizationContext.Current.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
लेकिन
मैं सिर्फ इस कोड लिखा है:मेरे Winforms एप्लिकेशन में सिंक्रनाइज़ेशन कॉन्टेक्स्ट.क्यूरेंट नल क्यों है?
System.Threading.SynchronizationContext.Current.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
लेकिन
this explanation देखें System.Threading.SynchronizationContext.Current रिक्त है।
SynchronizationContext.Current केवल मुख्य थ्रेड में सेट है
ब्लॉग पोस्ट एक समाधान का प्रस्ताव है (जो केवल धागा जहां आप वास्तव में इसकी आवश्यकता नहीं है) है।
इसे काम करने के लिए।
अपनी कक्षा
private SynchronizationContext synchronizationContext;
यूआई धागा में (मुख्य थ्रेड)
synchronizationContext = System.Threading.SynchronizationContext.Current;
कार्यकर्ता धागा
synchronizationContext.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
सिंक्रनाइज़ेशन कॉन्टेक्स्ट वर्कर थ्रेड में तत्काल, या पास कैसे किया जाता है? – Tim
मान लें कि आप अपने फॉर्म में 'BackgroundWorker' का उपयोग कर रहे हैं। यदि आप अपने कन्स्ट्रक्टर में 'सिंक्रनाइज़ेशन कॉन्टेक्स्ट.क्यूरेंट' को सहेजते हैं या कक्षा स्तर चर के रूप में लोड ईवेंट को सहेजते हैं, तो यह 'RunWorkerCompleted' हैंडलर में पहुंच योग्य होगा। वैकल्पिक रूप से, यदि आप एक प्रस्तुतकर्ता की तरह किसी अन्य वर्ग में काम कर रहे हैं, तो आप यूआई थ्रेड पर प्रस्तुतकर्ता बना सकते हैं और कन्स्ट्रक्टर में संदर्भ को सहेज सकते हैं। –
अच्छा वैकल्पिक हल में! – psulek