У меня есть основная форма, которая запускает поток 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).
Спасибо