У меня есть основная форма, которая запускает поток BackgroundWorker. Пока рабочий работает, я «замораживаю» основную форму и жду ее завершения, показывая ее прогресс.
В одном из сценариев рабочий может отображать диалоговое окно OpenFileDialog, чтобы пользователь мог выбрать файл. Я использую третий поток для запуска OpenFileDialog и устанавливаю для него ApartmentState значение STA, поскольку этого требует OpenFileDialog (выдает исключение, если я этого не делаю), а рабочий объект ApartmentState — это MTA.
Проблема в том, что я хочу передать потоку OpenFileDialog основную форму в качестве параметра, чтобы ее можно было использовать при вызове OpenFileDialog.ShowDialog. Что-то вроде этого:
public void ThreadProcShowDialog(object param)
{
Form parent = (Form)param;
dialog.ShowDialog(parent);
}
Конечно, ShowDialog выдает:
Недопустимая межпоточная операция: доступ к элементу управления «Форма» осуществляется из потока, отличного от потока, в котором он был создан.
Как я могу сделать это потокобезопасным способом?
Целью этого является то, что OpenFileDialog будет работать в потоке STA, блокируя отображение основной формы поверх него (запретить пользователю щелкать форму ниже, тем самым скрывая OpenFileDialog).
Спасибо