3.Что произойдет, если вы удалите этот атрибут?
Я просто добавляю простой пример, демонстрирующий проблему.
Я создал простое приложение WinForms с кнопкойи OpenFileDialog.По нажатию кнопки я запускаю поток, который показывает openFileDialog.Я запускаю приложение с STAThread и без него, и результаты нажатия кнопки одинаковы - оно выдает исключение «Операция с несколькими потоками недопустима: доступ к элементу управления Form1 осуществляется из потока, отличного от потока, в котором он был создан».Похоже, что нет никакой разницы.Но нет.
Затем я изменил отображение openFileDialog, вызвав следующий метод:
private void ShowOFD()
{
if (InvokeRequired)
{
BeginInvoke(new Action(ShowOFD));
return;
}
openFileDialog1.ShowDialog(this);
}
С STAThread он работает нормально, как и ожидалось.Без STAThread он выдает исключение: «Текущий поток должен быть установлен в однопотоковый режим (STA), прежде чем могут быть выполнены вызовы OLE. Убедитесь, что в вашей функции Main помечен атрибут STAThreadAttribute. Это исключение возникает, только если к отладчику присоединенпроцесс ".
Затем я запускаю приложение несколько раз без отладчика (отдельно от visual studio).Однажды приложение просто тихо закрылось, в другой раз приложение закрылось с сообщением «vshost прекратил работать»