2012-04-12 16 views
5

संदर्भित करने के लिए अपने सदस्यों की आवश्यकता है, this FsEye समस्या का संदर्भ, मैं यह निर्धारित करने के लिए प्रतिबिंब का उपयोग कैसे कर सकता हूं कि किसी ऑब्जेक्ट को अपने सदस्यों (या वास्तव में यदि संभव हो तो एक विशिष्ट सदस्य) की आवश्यकता हो जीयूआई धागे पर?यह निर्धारित करने के लिए प्रतिबिंब का उपयोग करना कि किसी ऑब्जेक्ट को GUI थ्रेड

परिदृश्य यह है: उपयोगकर्ता एफएसआई के भीतर WebBrowser ऑब्जेक्ट का उदाहरण बनाता है (जो अपने स्वयं के WinForms ईवेंट लूप चलाता है), फिर वे FsEye में नोड का विस्तार करने का प्रयास करते हैं। वर्तमान धागा एकल थ्रेड फ्लैट (एसटीए) मोड पर सेट किया जाना चाहिए इससे पहले कि OLE कॉल किया जा सकता है: लेकिन है कि एक बिना क्रिया का अपवाद संवाद बॉक्स चेतावनी देता है कि

System.Threading.ThreadStateException का परिणाम है। सुनिश्चित करें कि आपके मुख्य फ़ंक्शन में STAThreadAttribute चिह्नित है।

(विशेष रूप से यह केवल एक्सेसिबिलिटी ऑब्जेक्ट प्रॉपर्टी लोड करते समय होता है)।

मैं जानता हूँ कि इस वजह से FsEye भार बच्चे lazily नोड एसिंक्रोनस, और समानांतर में Async.Parallel साथ एफ # async गणना अभिव्यक्ति का उपयोग करते हुए और इस तरह गैर-मूल, गैर एसटीए (से इस OLE ऑब्जेक्ट के सदस्यों लागू है यानी नहीं मूल एफएसआई जीयूआई धागा) धागा पूल धागे। मुझे यह भी पता है कि मेरे एसिंक अभिव्यक्तियों के भीतर जीयूआई थ्रेड संदर्भ में स्विच करके इसे कैसे ठीक किया जाए, लेकिन जब मैं बिल्कुल जरूरी हूं तो मैं ऐसा करना चाहूंगा।

+0

करता है [ 'InvokeRequired' से निकला है ] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx) मदद? – Daniel

+1

@Daniel, मुझे ऐसा नहीं लगता है, जो सिर्फ उसे बताएगा कि वह यूआई थ्रेड पर नहीं है ... वह जानता है कि वह यूआई थ्रेड पर नहीं है, वह जानना चाहता है कि इस यादृच्छिक वस्तु को यूआई का उपयोग करने की आवश्यकता होगी या नहीं धागा खुद का मूल्यांकन करने के लिए। – Brian

उत्तर

3

कोई भी सदस्य नहीं है जिसे आप यह निर्धारित करने के लिए देख सकते हैं कि किसी ऑब्जेक्ट को एसटीए/एप्लिकेशन के मुख्य थ्रेड से बुलाया जाना चाहिए या नहीं। यह केवल कुछ ऐसा है जो किसी व्यक्तिगत प्रकार के

के अनुबंध में अंतर्निहित है, ऐसा कहा जा रहा है कि कुछ निश्चित संकेत हैं जिन्हें आप देख सकते हैं। ये एक वस्तु का संकेत होगा एक यूआई बाध्य घटक है, लेकिन किसी भी तरह से यह एक निश्चित सूची

  • System.Windows.Forms.Control
  • से निकला
  • UIElement
संबंधित मुद्दे

 संबंधित मुद्दे