0

Есть некоторый фоновый поток, который обменивается данными с другими машинами в пределах локальной сети. В определённый момент, по команде с другой машины, программа показывает новую форму:

Form1 _form = new Form1(currentServer.serverIp,
 currentServer.serverPort);
Application.Run(_form);    

Создаётся новый поток, чтобы не прерывать рабочий, т.к. он должен продолжать общение с другими машинами. В форме Form1 находится кнопка, по нажатию на которую нужно отобразить OpenFileDialog. Но т.к. сама форма запущена из фонового потока, вылезает ошибка:

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша функция Main помечена атрибутом STAThreadAttribute. Данное исключение создается, только если к процессу подключен отладчик.

Запросы гугла говорят, что нужна пометка [STAThread] и вызов окна через делегат, но это не работает даже в совокупности( Если начать запуск программы с данной формы, то всё отображается нормально. Как отобразить OpenFileDialog в форме, которая запущена из фона?

1 Answers1

1

Решил данную проблему путем открытия Form1 при старте программы, а в нужный момент нажатие по форме происходило в рамках UI треда и всё открывается штатно. Если есть какие-то дополнительные мысли, буду рад услышать!