2010-11-16 22 views
16

संभव डुप्लिकेट:
Could you explain STA and MTA?[MTAThread] का उपयोग कब करें?

सी # खिड़कियों में आवेदन रूपों। मैंने मुख्य कार्य के ऊपर Program.cs में [STAThread] देखा है।

इसलिए मैं जानना चाहता हूं कि एसटीए या एमटीए थ्रेड का उपयोग कब करना है?
कैसे, यह एप्लिकेशन को प्रभावित करता है?

उत्तर

15

कोई थ्रेड जो किसी भी विंडो बनाता है हमेशा एक एकल थ्रेडेड अपार्टमेंट बनाएं। एक एसटीए किसी भी COM ऑब्जेक्ट के लिए थ्रेडिंग गारंटी प्रदान करता है जो थ्रेड-सुरक्षित नहीं है। बहुत कम हैं। COM बुनियादी ढांचे सुनिश्चित करता है कि इस तरह के किसी ऑब्जेक्ट के तरीकों को हमेशा सही धागे से बुलाया जाता है, यदि आवश्यक हो तो कॉल को मार्शल करना। नियंत्रण के समान ही। बेगिन/Invoke() लेकिन बिना किसी कोडिंग के स्वचालित रूप से किया जाता है।

कई विंडोज़ सुविधाएं उस गारंटी पर भरोसा करती हैं। विशेष रूप से क्लिपबोर्ड, ड्रैग + ड्रॉप और खोल संवाद (जैसे OpenFileDialog) इसके बिना ठीक से काम नहीं करेगा। और ActiveX नियंत्रणों के बहुत सारे, WebBrowser एक आम है जिसे आप Winforms प्रोजेक्ट में उपयोग करेंगे। अपने यूआई थ्रेड को एमटीए थ्रेड बनाना विफलता का निदान करने के लिए कठिन होता है, डेडलॉक एक आम है। या एक त्वरित अपवाद जब घटक के लिए .NET wrapper डबल-चेक करता है कि यह एक एसटीए पर बनाया गया था।

6

आप WinForms में एमटीए का उपयोग नहीं कर सकते हैं क्योंकि अधिकांश विंडोज नियंत्रण काम नहीं करेंगे क्योंकि वे एमटीए के साथ संगत नहीं हैं। तो हमेशा एमटीए का उपयोग करें जब तक कि आपके आवेदन का कोड एसटीए COM वस्तुओं को कॉल नहीं करता है। उदाहरण के लिए एएसपी.नेट में, एमटीए डिफ़ॉल्ट मॉडल है।

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