为什么OpenFileDialog不打开?

本文关键字:OpenFileDialog 为什么 | 更新日期: 2023-09-27 18:16:39

我有一个c#应用程序,它在系统托盘中有一个图标。当用户右键单击它时,它将显示一个菜单。

  1. 打开文件
  2. 退出

当用户单击1. open file时,它将显示(ShowDialog)一个带有两个按钮的表单

  1. 打开文件

当用户点击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行,应用程序死锁
  1. 用户不能与表单交互,它不响应
  2. OpenFileDialog不显示

你能帮忙解释一下这个问题发生的原因吗?

更新答案

    在系统托盘中创建图标的表单是从另一个线程调用的。
  1. 我设置:thread.SetApartmentState(ApartmentState.STA);, OpenFileDialog将显示。

为什么OpenFileDialog不打开?

openFile.ShowDialog(); 

表示当前表单(创建对话框的表单)将打开模态窗口

尝试从单独的线程打开对话框,并在它返回时使用回调。showdialog正在阻塞当前线程,因为您正在等待对话框的响应以继续您的应用程序行为-这意味着您的应用程序将挂起,直到它完成。