为什么OpenFileDialog不打开?
本文关键字:OpenFileDialog 为什么 | 更新日期: 2023-09-27 18:16:39
我有一个c#应用程序,它在系统托盘中有一个图标。当用户右键单击它时,它将显示一个菜单。
- 打开文件 退出
当用户单击1. open file
时,它将显示(ShowDialog)一个带有两个按钮的表单
- 打开文件
当用户点击1. open file
时,它将执行
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "All files (*.*)|*.*";
DialogResult result = openFile.ShowDialog(); // deadlock here
if (result == DialogResult.OK){
// do some thing
}
在第3行,应用程序死锁- 用户不能与表单交互,它不响应
- OpenFileDialog不显示
你能帮忙解释一下这个问题发生的原因吗?
更新答案
- 在系统托盘中创建图标的表单是从另一个线程调用的。
- 我设置:
thread.SetApartmentState(ApartmentState.STA);
, OpenFileDialog将显示。
openFile.ShowDialog();
表示当前表单(创建对话框的表单)将打开模态窗口
尝试从单独的线程打开对话框,并在它返回时使用回调。showdialog正在阻塞当前线程,因为您正在等待对话框的响应以继续您的应用程序行为-这意味着您的应用程序将挂起,直到它完成。