Возможный дубликат:
Не могли бы вы объяснить STA и MTA?
В приложении Windows Forms. Я видел [STAThread] в Program.cs выше главной функции.
поэтому я хочу знать, когда использовать поток STA или MTA?
Как это влияет на приложение?
Возможный дубликат:
Не могли бы вы объяснить STA и MTA?
В приложении Windows Forms. Я видел [STAThread] в Program.cs выше главной функции.
поэтому я хочу знать, когда использовать поток STA или MTA?
Как это влияет на приложение?
Нить, которая создает любые окна, должна всегда создавать однопоточную квартиру. STA предоставляет гарантии на резьбу для любого COM-объекта, который не является потокобезопасным. Очень немногие. Инфраструктура COM гарантирует, что методы такого объекта всегда вызываются из нужного потока, при необходимости маршируя вызов. Совсем аналогично Control.Begin/Invoke(), но выполняется автоматически без какого-либо кодирования.
Некоторые средства Windows полагаются на эту гарантию. Примечательно, что буфер обмена, Drag + Drop и диалоговые окна оболочки (например, OpenFileDialog) не будут работать без него. И множество элементов управления ActiveX, WebBrowser - общий, который вы будете использовать в проекте Winforms. Создание потока пользовательского интерфейса в потоке MTA затрудняет диагностику отказа, а тупик является общим. Или быстрое исключение, когда оболочка .NET для компонента проверяет, что он был создан на STA.
Вы не можете использовать MTA в WinForms, так как большинство элементов управления Windows не будут работать, поскольку они не совместимы с MTA. Поэтому всегда используйте MTA, если код вашего приложения не вызывает вызовы COM-объектов STA. Например, в ASP.NET MTA является моделью по умолчанию.