سؤال

أنا أتعلم C# 3.5 وأريد أن أعرف ماذا [STAThread] هل في برامجنا؟

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

المحلول

ال STAThreadAttribute هو في الأساس شرط لمضخة رسائل Windows للتواصل مع مكونات COM. على الرغم من أن نماذج Windows الأساسية لا تستخدم COM ، إلا أن العديد من مكونات نظام التشغيل مثل حوار النظام تستخدم هذه التكنولوجيا.

MSDN يشرح السبب في المزيد من التفاصيل:

يشير StathReadAttribute إلى أن نموذج خيوط COM للتطبيق هو شقة واحدة. يجب أن تكون هذه السمة موجودة على نقطة إدخال أي تطبيق يستخدم نماذج Windows ؛ إذا تم حذفه ، فقد لا تعمل مكونات Windows بشكل صحيح. إذا لم تكن السمة موجودة ، فإن التطبيق يستخدم نموذج الشقة المتعدد مؤشرات الترابط ، والذي لا يتم دعمه لنماذج Windows.

منشور المدونة هذا (لماذا يتطلب Stathread؟) يشرح أيضا المتطلبات بشكل جيد جدا. إذا كنت تريد طريقة عرض أكثر تعمقًا حول كيفية عمل نموذج الخيوط على مستوى CLR ، انظر مقالة مجلة MSDN هذه من يونيو 2004 (أرشفة ، أبريل 2009).

نصائح أخرى

يخبر المترجم بأنك في نموذج شقة خيط واحد. هذا شيء شرير ، يتم استخدامه عادةً في أشكال Windows (واجهة المستخدم الرسومية) حيث يستخدم Win32 لرسمه ، والذي يتم تنفيذه كـ STA. إذا كنت تستخدم شيئًا من طراز STA من مؤشرات ترابط متعددة ، فستحصل على كائنات تالفة.

هذا هو السبب في أنك يجب أن تستدعي واجهة المستخدم الرسومية من موضوع آخر (إذا قمت بأي نماذج ترميز).

في الأساس لا تقلق بشأن ذلك ، فقط اقبل أنه يجب تمييز مؤشرات ترابط Windows GUI مع حدوث أشياء غريبة على خلاف ذلك.

يمثل StathReadAttribute خيط لاستخدام شقة COM ذات الخيوط الواحدة إذا كانت هناك حاجة إلى COM. بشكل افتراضي ، لن يقوم .NET بتهيئة COM على الإطلاق. إنه فقط عند الحاجة إلى COM ، مثل عندما يتم إنشاء كائن COM أو COM CONTROL أو عند الحاجة إلى DRAG 'N' DRIP ، يتم تهيئة COM. عندما يحدث ذلك ، يستدعي .NET وظيفة coinitializeex الأساسية ، والتي تأخذ علامة تشير إلى ما إذا كان سيتم الانضمام إلى الخيط إلى شقة متعددة الخيوط أو أحادية الخيوط.

اقرأ المزيد من المعلومات هنا (أرشفة ، يونيو 2009)

و

لماذا يتطلب Stathread؟

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