我有一个运行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)。
谢谢