Подтвердить что ты не робот

Когда использовать [MTAThread]?

Возможный дубликат:
Не могли бы вы объяснить STA и MTA?

В приложении Windows Forms. Я видел [STAThread] в Program.cs выше главной функции.

поэтому я хочу знать, когда использовать поток STA или MTA?
Как это влияет на приложение?

4b9b3361

Ответ 1

Нить, которая создает любые окна, должна всегда создавать однопоточную квартиру. STA предоставляет гарантии на резьбу для любого COM-объекта, который не является потокобезопасным. Очень немногие. Инфраструктура COM гарантирует, что методы такого объекта всегда вызываются из нужного потока, при необходимости маршируя вызов. Совсем аналогично Control.Begin/Invoke(), но выполняется автоматически без какого-либо кодирования.

Некоторые средства Windows полагаются на эту гарантию. Примечательно, что буфер обмена, Drag + Drop и диалоговые окна оболочки (например, OpenFileDialog) не будут работать без него. И множество элементов управления ActiveX, WebBrowser - общий, который вы будете использовать в проекте Winforms. Создание потока пользовательского интерфейса в потоке MTA затрудняет диагностику отказа, а тупик является общим. Или быстрое исключение, когда оболочка .NET для компонента проверяет, что он был создан на STA.

Ответ 2

Вы не можете использовать MTA в WinForms, так как большинство элементов управления Windows не будут работать, поскольку они не совместимы с MTA. Поэтому всегда используйте MTA, если код вашего приложения не вызывает вызовы COM-объектов STA. Например, в ASP.NET MTA является моделью по умолчанию.