WinForms: يحتاج كائن COM واحد إلى Stathread، والآخر يحتاج إلى mtathread. كيف يمكنني استخدامها؟
-
19-09-2019 - |
سؤال
أحاول بناء تطبيق 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();
لا تنتمي إلى StackOverflow