मैं प्लग-इन मॉडल का एक तरहबनाना नियंत्रण धागा
Activator.CreateInstanceFrom(dllpath, classname).
का उपयोग कर जब से मैं लोड हो रहा है कर रहा हूँ, जिसमें विभिन्न जटिल उपयोगकर्ता नियंत्रण DLLs और लोड में जमा हो जाती है और रन टाइम पर instantiated कर रहे हैं इनमें से कुछ मैं लोडिंग करने के लिए एक नया धागा बनाकर, अपने यूआई उत्तरदायी को ध्यान में रखते हुए, पृष्ठभूमि में ऐसा करना चाहता था। नियंत्रण तब मुख्य रूप में अभिभावित होते हैं और आवश्यकता होने पर प्रदर्शित होते हैं।
यह ठीक काम करता प्रतीत होता है - जब तक कि मैं इन उपयोगकर्ता नियंत्रणों में से किसी एक पर किसी नेस्टेड नियंत्रण पर कोई भी संपत्ति सेट करने का प्रयास नहीं करता, उदा। एक बटन के ईवेंट हैंडलर में, जो क्रॉस थ्रेडिंग अपवाद फेंकता है। मुझे एहसास है कि जब भी मैं किसी संपत्ति तक पहुंचता हूं, तो मैं InvokeRequired की जांच करके इससे बच सकता हूं, लेकिन मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है कि उपयोगकर्ता नियंत्रण के लिए कोड लिखते समय (विशेष रूप से क्योंकि अन्य लोग कोड के इन बिट्स को भी लिखते हैं जो शायद हमेशा याद नहीं है)।
तो मेरा सवाल यह है कि क्या मैं कोशिश कर रहा हूं कि कोई भी सुरक्षित तरीका है या पृष्ठभूमि में इन नियंत्रणों को लोड करने के बारे में मुझे सबसे अच्छा कैसे जाना चाहिए? या यह मूल रूप से असंभव है और क्या मुझे नियंत्रण बनाने के लिए मुख्य धागे पर चिपकना है?
मुझे उम्मीद है कि मैंने जो जानकारी प्रदान की है वह मेरी स्थिति को स्पष्ट करने के लिए पर्याप्त है; यदि नहीं, तो मुझे विस्तार और कोड नमूने प्रदान करने में खुशी होगी।
"जब तक कि मैं कोई संपत्ति सेट करने का प्रयास नहीं करता" - क्या वह थ्रेड या बाद में है? –
बाद में, उपयोगकर्ता नियंत्रण को मुख्य रूप में संरक्षित किया गया है (जैसा कि form.controls.add (mycontrol) में है) –