2012-11-28 13 views
8

Watin के source code में, वहाँ कोड के इस टुकड़े है? मुझे कोड के विशिष्ट टुकड़े में दिलचस्पी नहीं है, लेकिन मुझे आश्चर्य है कि STAThread विशेषता बिल्कुल आवश्यक है।SetApartmentState और [STAThread]

नोट्स:

  • विधि GoToNoWaitInternal कहीं और नहीं किया जाता है।
  • संपूर्ण वाटिन प्रोजेक्ट WebBrowser ऑब्जेक्ट्स (सामान्य रूप से इंटरनेट एक्सप्लोरर विंडो) में हेरफेर करने के बारे में है। इस प्रकार, हम एक COM ऑब्जेक्ट में हेरफेर कर रहे हैं।

उत्तर

6

बस STAThreadAttribute (मेरा जोर) के लिए दस्तावेज़ पढ़ें:

प्रवेश बिंदु विधि (सी # और विजुअल बेसिक में Main() विधि) को यह विशेषता लागू करें। इसका अन्य तरीकों पर कोई प्रभाव नहीं पड़ता है। धागे की अपार्टमेंट स्थिति सेट करने के लिए आप अपने कोड में शुरू करते हैं, थ्रेड शुरू करने से पहले Thread.SetApartmentState विधि का उपयोग करें।

तो, इस मामले में, विशेषता का कोई प्रभाव नहीं होना चाहिए।

+0

एक कारण होना चाहिए [जेरिक वैन मेनन] (http://stackoverflow.com/users/52173/jeroen-van-menen) ने इसे – Odys

+0

@odyodyodys जोड़ा है, आपको उसे इसके बारे में पूछना होगा। – svick

+0

ध्यान दें कि 'STAThreadAttribute' केवल' मुख्य() 'को प्रभावित करता है क्योंकि इसका उपयोग केवल [ApplicationActivator.CreateInstance] (https://msdn.microsoft.com/en-us/library/ms146108%28v=vs.110%29 में किया जाता है। एएसपीएक्स), आप देख सकते हैं कि इस विशेषता का उपयोग [संदर्भ स्रोत] (https://referencesource.microsoft.com/#mscorlib/system/applicationactivator.cs,104) में किया जाता है (एक 'आंतरिक' विधि में, 'एप्लिकेशन एक्टिवेटर। ExecuteAsAssembly() ') – jrh

3

यह ध्यान दिया जाना चाहिए कि एसटीए (सिंगल थ्रेडेड अपार्टमेंट) थ्रेडिंग मॉडल है जो प्री-नेट विज़ुअल बेसिक द्वारा उपयोग किया जाता है। इसका उपयोग केवल घटकों के मुख्य विधि पर किया जाना चाहिए जो COM के संपर्क में आ जाएंगे। जिस कोड को आप समझने की कोशिश कर रहे हैं उसका लेखक, स्पष्ट रूप से समझ में नहीं आया कि इसका उपयोग कैसे किया जाना चाहिए।

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