2010-11-16 24 views

Antwort

15

Ein Thread, der keine Fenster erstellt, sollte immer eine single-threaded Wohnung erstellen. Eine STA bietet Threading-Garantien für jedes COM-Objekt, das nicht Thread-sicher ist. Sehr wenige sind. Die COM-Infrastruktur stellt sicher, dass die Methoden eines solchen Objekts immer vom rechten Thread aus aufgerufen werden und den Aufruf bei Bedarf marshalieren. Ganz ähnlich wie Control.Begin/Invoke(), aber ohne jegliche Programmierung automatisch gemacht.

Eine Reihe von Windows-Einrichtungen verlassen sich auf diese Garantie. Insbesondere die Zwischenablage, Drag + Drop und die Shell-Dialoge (wie OpenFileDialog) funktionieren ohne sie nicht richtig. Und viele ActiveX-Steuerelemente, WebBrowser, der in einem Winforms-Projekt verwendet wird. Wenn Sie Ihren UI-Thread zu einem MTA-Thread machen, ist der Fehler schwer zu diagnostizieren, da es sich um einen häufigen Deadlock handelt. Oder eine schnelle Ausnahme, wenn der .NET-Wrapper für die Komponente überprüft, ob er in einer STA erstellt wurde.

6

Sie können MTA in WinForms nicht verwenden, da die meisten Windows-Steuerelemente nicht funktionieren, da sie nicht mit MTA kompatibel sind. Verwenden Sie daher immer MTA, es sei denn, der Code Ihrer Anwendung ruft STA COM-Objekte auf. In ASP.NET ist MTA beispielsweise das Standardmodell.

Verwandte Themen