जवाबों:
STAThreadAttribute
अनिवार्य रूप से COM घटकों के साथ संवाद करने के लिए Windows संदेश पंप के लिए एक आवश्यकता है। हालांकि कोर विंडोज फॉर्म COM का उपयोग नहीं करते हैं, ओएस के कई घटक जैसे सिस्टम डायलॉग इस तकनीक का उपयोग करते हैं।
MSDN थोड़ा और विस्तार से कारण बताता है:
STAThreadAttribute इंगित करता है कि अनुप्रयोग के लिए COM थ्रेडिंग मॉडल सिंगल-थ्रेडेड अपार्टमेंट है। यह विशेषता विंडोज फॉर्म का उपयोग करने वाले किसी भी एप्लिकेशन के प्रवेश बिंदु पर मौजूद होनी चाहिए; यदि इसे छोड़ दिया जाता है, तो Windows घटक सही तरीके से काम नहीं कर सकते हैं। यदि विशेषता मौजूद नहीं है, तो एप्लिकेशन मल्टीथ्रेडेड अपार्टमेंट मॉडल का उपयोग करता है, जो विंडोज फॉर्म के लिए समर्थित नहीं है।
यह ब्लॉग पोस्ट ( STAThread क्यों आवश्यक है? ) भी आवश्यकता को अच्छी तरह से समझाता है। यदि आप अधिक गहराई से देखना चाहते हैं कि थ्रेडिंग मॉडल सीएलआर स्तर पर कैसे काम करता है, तो जून 2004 से इस MSDN पत्रिका लेख को देखें (संग्रहीत, अप्रैल 2009)।
यह संकलक को बताता है कि आप सिंगल थ्रेड अपार्टमेंट मॉडल में हैं। यह एक बुराई COM बात है, यह आमतौर पर विंडोज फॉर्म (GUI) के लिए उपयोग किया जाता है क्योंकि यह अपने ड्राइंग के लिए Win32 का उपयोग करता है, जिसे STA के रूप में लागू किया जाता है। यदि आप कई धागों से एसटीए मॉडल का उपयोग कर रहे हैं तो आपको दूषित वस्तुएं मिलती हैं।
यही कारण है कि आपको गुई पर दूसरे धागे से आह्वान करना होगा (यदि आपने किसी भी प्रकार का कोडिंग किया है)।
मूल रूप से इसके बारे में चिंता न करें, बस स्वीकार करें कि Windows GUI थ्रेड्स को STA के रूप में चिह्नित किया जाना चाहिए अन्यथा अजीब सामान होता है।
यदि आवश्यक हो तो STAThreadAttribute सिंगल-थ्रेडेड COM अपार्टमेंट का उपयोग करने के लिए एक थ्रेड को चिह्नित करता है। डिफ़ॉल्ट रूप से, .NET COM को आरंभ में प्रारंभ नहीं करेगा। यह केवल तभी है जब COM की आवश्यकता होती है, जैसे कि जब COM ऑब्जेक्ट या COM कंट्रोल बनाया जाता है या जब ड्रैग 'एन' ड्रॉप की आवश्यकता होती है, तो COM को प्रारंभ किया जाता है। जब ऐसा होता है, तो .NET अंतर्निहित CoInitializeEx फ़ंक्शन को कॉल करता है, जो यह दर्शाता है कि एक थ्रेड को बहु-थ्रेडेड या सिंगल-थ्रेडेड अपार्टमेंट में शामिल होना है या नहीं।
अधिक जानकारी यहाँ पढ़ें (संग्रहीत, जून 2009)
तथा
[STAThread]
?