سؤال

ومن المقال MSDN على STAThread:

<اقتباس فقرة>   

ويشير إلى أن طراز مؤشر الترابط COM لتطبيق هو شقة ترابط واحد (STA).

و(للإشارة، وهذا href="http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx" المقال كامل ).

ومترابطة واحدة ... OK، التي ذهبت فوق رأسي. أيضا، قرأت في مكان ما أنه ما لم يستخدم التطبيق إمكانية التشغيل المتداخل COM، هذه السمة في الواقع لا يفعل شيئا على الإطلاق. ذلك بالضبط ما يفعل، وكيف يؤثر على تطبيقات متعددة الخيوط؟ يجب أن تطبيقات متعددة الخيوط (التي تشمل أي شيء من أي شخص باستخدام Timers لاستدعاءات الأسلوب غير المتزامن، وليس فقط threadpools وما شابه ذلك) استخدام MTAThread، حتى لو كان "مجرد أن تكون آمنة؟ ماذا STAThread وMTAThread فعلا؟

هل كانت مفيدة؟

المحلول

وشقة خيوط هو مفهوم COM. إذا كنت لا تستخدم COM، وأيا من واجهات برمجة التطبيقات استدعاء استخدام COM "تحت الأغطية"، ثم كنت لا داعي للقلق حول الشقق.

إذا كنت بحاجة ليكون على بينة من الشقق، ثم يمكن الحصول على تفاصيل <لأ href = "http://msdn.microsoft.com/en-us/library/ms693344(VS.85).aspx" يختلط = "noreferrer"> أ تعقيدا قليلا . نسخة التبسيط ربما هو أن الأجسام COM يوصف بانه STA يجب تشغيل على STAThread، وكائنات COM وضع علامة يجب تشغيل MTA على موضوع MTA. باستخدام هذه القواعد، يمكن COM تحسين الاتصالات بين هذه الكائنات المختلفة، وتجنب التعبئة حيث أنه ليس من الضروري.

نصائح أخرى

ما الذي يفعل ذلك يضمن أن CoInitialize يسمى تحديد COINIT_APARTMENTTHREADED كمعلمة. إذا كنت لا تستخدم أي مكونات COM أو عناصر تحكم ActiveX أنه لن يكون لها تأثير على لك على الإطلاق. إذا كنت تفعل ذلك الحين انها نوع من بالغ الأهمية.

والضوابط التي هي مترابطة هي واحدة مترابطة على نحو فعال، الدعوات التي صدرت لهم يمكن معالجتها إلا في الشقة التي تم إنشاؤها في.

وبعض التفاصيل أكثر من MSDN:

<اقتباس فقرة>   

والكائنات التي أنشئت في ترابط واحد   شقة (STA) تلقي المكالمات طريقة   فقط من موضوع شقتهم، لذلك   المكالمات تسلسل وصول فقط   في حدود الرسالة الطابور (عندما   Win32 وظيفة PeekMessage أو   ويسمى SendMessage).

     

والكائنات التي أنشئت على موضوع COM في   شقة مولتيثريد (MTA) يجب أن يكون   قادرة على استقبال المكالمات الأسلوب من   المواضيع الأخرى في أي وقت. انت ترغب   عادة تنفيذ بعض شكل من أشكال   التحكم التزامن في مؤشرات   كود الكائن باستخدام Win32   البدائيون التزامن مثل   مقاطع الهامة، الإشارات، أو   كائنات المزامنة للمساعدة في حماية الكائن   البيانات.

     

عند كائن الذي تم تكوينه ل   تشغيل في الشقة مترابطة محايدة   (NTA) ويسمى بخيط التي هي في   إما STA أو MTA، أن موضوع   التحويلات إلى الهيئة الوطنية للمواصلات. إذا هذا الموضوع   يدعو بعد ذلك CoInitializeEx، و   فشلت الدعوة والعوائد   RPC_E_CHANGED_MODE.

وهو مكتوب STAThread قبل الدالة الرئيسية للمشروع C # واجهة المستخدم الرسومية. فإنه لا يفعل شيئا ولكن يسمح البرنامج لخلق ترابط واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top