Also, nach this, entschied ich mich, explizit ein COM-Objekt in einem dedizierten STA-Thread instanziieren. Die Experimente zeigten, dass das COM-Objekt eine Nachricht Pumpe benötigt, die ich durch den Aufruf Application.Run()
erstellt:Wie können Nachrichten an einen STA-Thread gesendet werden, der eine Nachrichtenpumpe ausführt?
private MyComObj _myComObj;
// Called from Main():
Thread myStaThread = new Thread(() =>
{
_myComObj = new MyComObj();
_myComObj.SomethingHappenedEvent += OnSomthingHappened;
Application.Run();
});
myStaThread.SetApartmentState(ApartmentState.STA);
myStaThread.Start();
Wie schreibe ich Nachrichten die das Nachrichtensystem von anderen Threads des STA-Thread?
Hinweis: Ich habe die Frage aus Gründen der Kürze stark bearbeitet. Einige Teile von @ Servys Antwort scheinen jetzt nicht verwandt zu sein, aber sie waren für die ursprüngliche Frage.
Für eine nicht blockierende Initiierung können Sie ThreadPool.QueueUserWorkerItem nicht verwenden? – Didaxis
@Daxis, nein, weil dann die Nachrichtenpumpe in diesem Thread nicht läuft. – Servy
[Diese Antwort] (http://stackoverflow.com/a/21775343/1768303) verwendet TPL und 'async/await', um eine STA-Wohnung zu implementieren und anzurufen. – Noseratio