WinForms: Un oggetto COM ha bisogno di uno STAThread, l'altro ha bisogno di un MTAThread. Come posso usare?
-
19-09-2019 - |
Domanda
Sto cercando di costruire un'applicazione WinForms con due componenti COM. Tuttavia, uno dei componenti funziona solo quando si utilizza [MTAThread]
e l'altra funziona solo con [STAThread]
.
Quale sarebbe la soluzione consigliata è?
Soluzione
forme di Windows richiede [STAThread] di essere presenti su di essa la principale punto di accesso. Funzionerà solo in singolo stato appartamento filettato. È possibile utilizzare l'oggetto COM STA sul thread dell'interfaccia utente in Windows Form, senza problemi.
L'approccio tipico per questo è di creare il proprio filo, e impostare il Thread.ApartmentState di MTA (anche se questo è il default) per il filo separato. Inizializzare e utilizzare i componenti COM MTA-Threaded dall'interno di questo thread.
ThreadStart threadEntryPoint = ...;
var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA; // set this before you call Start()!
thread.Start();