Есть некоторый фоновый поток, который обменивается данными с другими машинами в пределах локальной сети. В определённый момент, по команде с другой машины, программа показывает новую форму:
Form1 _form = new Form1(currentServer.serverIp,
currentServer.serverPort);
Application.Run(_form);
Создаётся новый поток, чтобы не прерывать рабочий, т.к. он должен продолжать общение с другими машинами. В форме Form1 находится кнопка, по нажатию на которую нужно отобразить OpenFileDialog. Но т.к. сама форма запущена из фонового потока, вылезает ошибка:
Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша функция Main помечена атрибутом STAThreadAttribute. Данное исключение создается, только если к процессу подключен отладчик.
Запросы гугла говорят, что нужна пометка [STAThread] и вызов окна через делегат, но это не работает даже в совокупности( Если начать запуск программы с данной формы, то всё отображается нормально. Как отобразить OpenFileDialog в форме, которая запущена из фона?
Thread.SetAppartmentState, а вообще вы не можете взаимодействовать с интерфейсом из фоновых потоков. – aepot Apr 17 '21 at 07:40