2009-11-10 11 views

उत्तर

15

this explanation देखें System.Threading.SynchronizationContext.Current रिक्त है।

SynchronizationContext.Current केवल मुख्य थ्रेड में सेट है

ब्लॉग पोस्ट एक समाधान का प्रस्ताव है (जो केवल धागा जहां आप वास्तव में इसकी आवश्यकता नहीं है) है।

+0

अच्छा वैकल्पिक हल में! – psulek

18

इसे काम करने के लिए।

अपनी कक्षा

private SynchronizationContext synchronizationContext; 

यूआई धागा में (मुख्य थ्रेड)

synchronizationContext = System.Threading.SynchronizationContext.Current; 

कार्यकर्ता धागा

synchronizationContext.Post( 
    state => DoUpdateInUIThread((Abc)state),  
    abc); 
+0

सिंक्रनाइज़ेशन कॉन्टेक्स्ट वर्कर थ्रेड में तत्काल, या पास कैसे किया जाता है? – Tim

+0

मान लें कि आप अपने फॉर्म में 'BackgroundWorker' का उपयोग कर रहे हैं। यदि आप अपने कन्स्ट्रक्टर में 'सिंक्रनाइज़ेशन कॉन्टेक्स्ट.क्यूरेंट' को सहेजते हैं या कक्षा स्तर चर के रूप में लोड ईवेंट को सहेजते हैं, तो यह 'RunWorkerCompleted' हैंडलर में पहुंच योग्य होगा। वैकल्पिक रूप से, यदि आप एक प्रस्तुतकर्ता की तरह किसी अन्य वर्ग में काम कर रहे हैं, तो आप यूआई थ्रेड पर प्रस्तुतकर्ता बना सकते हैं और कन्स्ट्रक्टर में संदर्भ को सहेज सकते हैं। –