لماذا يحتاج WPF إلى تطبيق سمة Stathread على الطريقة الرئيسية؟

StackOverflow https://stackoverflow.com/questions/1293402

  •  18-09-2019
  •  | 
  •  

سؤال

أنا جديد على WPF، وفي كل برنامج تعليمي قرأته، لديهم إما [System.STAThread] السمة المطبقة على بهم Main الطريقة، أو يخبرون القارئ للقيام بذلك.

هل هذه السمة "مطلوبة" حقا؟ وإذا كان الأمر كذلك، لماذا؟

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

المحلول

هذا هو متطلبات Windows أكثر من WPF One، ويعود إلى التصميم الأصلي لنماذج Windows والتحكم، من قبل .NET.

يشير Stathread إلى "الشقق الواحدة الخيوط" التي تشير إلى طراز الخيوط المستخدمة من خلال الخيط الحالي (الرئيسي). يملي نموذج الخيوط المستخدمة في الاستخدام كيفية التحدث عن تطبيقات .NET و COM الأخرى إلى التطبيق الخاص بك (وبالمثل، مواضيعها). يتطلب نموذج التطبيق ذو الخيوط الفردية أنه لا يوجد كائن واحد "يعيش في" أكثر من مؤشر ترابط STA واحد في وقت واحد، آيات نموذج مؤشر ترابط MTA؛ ويسمح بتمرير المؤشرات إلى البيانات عبر الشقق فقط عبر التنظيم ككائن.

في الأساس، مع إعلان [Stathread]، ستعرف التطبيقات الأخرى ما هي سياسة مؤشر ترابطك عند إرسال البيانات إليك. نموذج STA هو نموذج الخيوط الأكثر شيوعا لخيوط / تطبيقات Windows؛ ولكن عليك أن تأتي في بعض الأحيان رمز معين لن يتم تشغيله إذا تم استدعاؤه من مؤشر ترابط STA المصمم، لأنه مصمم لإرسال / تلقي البيانات عبر حدود مؤشر الترابط بطرق لا تمتثل لقيود STA. مع العلم مسبقا ما يسمح به نموذج الشقق لمؤشر موضوع معين لل IDE للقبض على هذه الاستثناءات في تجميع الوقت بدلا من الحصول على أخطاء انتهاك وصول سيئة عند محاولة استخدام كائن عبر حدود مؤشر الترابط أثناء وقت التشغيل.

يمكنك أن تقرأ عن مؤشرات الترابط STA و MTA من مقالة MSDN في: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx.

لاحظ أنه حتى تطبيقات .NET العادية (من قبل WPF) تتطلب Atop [Stathread] Atop of the Main ().

نصائح أخرى

هناك إجابة ممتازة لهذا في هذا مدونة المدونة.

نقلا عن المدونة:

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

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

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