WinForms: يحتاج كائن COM واحد إلى Stathread، والآخر يحتاج إلى mtathread. كيف يمكنني استخدامها؟

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

سؤال

أحاول بناء تطبيق WinForms مع اثنين من مكونات COM. ومع ذلك، يعمل أحد المكونات فقط عند استخدام [MTAThread] والآخر يعمل مع [STAThread].

ماذا سيكون الحل الموصى به؟

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

المحلول

تتطلب نماذج Windows [Stathread] أن تكون موجودة على نقطة الدخول الرئيسية. سوف يعمل فقط في ولاية شقة واحدة الخيوط. يمكنك استخدام كائن STA COM الخاص بك على مؤشر ترابط UI في نماذج Windows، دون أي مشاكل.

النهج النموذجي لهذا هو إنشاء الخيط الخاص بك، وتعيين thread.apartmentstate. إلى MTA (على الرغم من أن هذا هو الافتراضي) لخيط منفصل. تهيئة واستخدام مكونات COM الخيوط MTA من داخل هذا الموضوع.

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top