为什么OpenFileDialogue会导致C#Forms应用程序调试失败?

为什么OpenFileDialogue会导致C#Forms应用程序调试失败?,c#,.net,debugging,openfiledialog,C#,.net,Debugging,Openfiledialog,在过去的两天里,我一直在试图找到解决这个问题的方法。基本上,在调试表单应用程序时,我有一个带有onclick事件处理程序的按钮。下面是我的处理程序中的代码 private void btnBrowseReqDoc_Click(object sender, EventArgs e) { OpenFileDialog FileDlg = new OpenFileDialog(); FileDlg.InitialDirectory = m_ConfigFile.GetReqDo

在过去的两天里,我一直在试图找到解决这个问题的方法。基本上,在调试表单应用程序时,我有一个带有onclick事件处理程序的按钮。下面是我的处理程序中的代码

private void btnBrowseReqDoc_Click(object sender, EventArgs e)
  {
     OpenFileDialog FileDlg = new OpenFileDialog();
     FileDlg.InitialDirectory = m_ConfigFile.GetReqDocDir();
     FileDlg.Filter = "All Files (*.*)|*.*|Word 97-2003 (*.doc)|*.doc|Word 2007 (*.docx)|*.docx";
     FileDlg.FilterIndex = 1;

     if (FileDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
        txtWordReqDoc.Text = FileDlg.FileName;

        SetProgressControls(false);
     }

     this.btnExecute.Enabled = CanEnableExecuteBtn();
     lblStatus.Visible = !(CanEnableExecuteBtn());
  } 
大约有60%到70%的时间,此操作无法完成。出现了一个局部窗口,但此时它基本上是死亡窗口。我必须重新启动才能恢复我的机器。这个问题似乎并不罕见。根据我的研究,大多数人似乎觉得这与线程有关。My program.cs始终设置了此属性。这是我的program.cs代码

  static class Program
{
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main()
  {
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new MainForm());
  }
}
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
运行(新的MainForm());
}
}

那么这只是某种线程争用吗?为什么它有时起作用,有时不起作用??OpenFileDialogue是否应该在后台进程中运行??我在调试(基本上只是粘贴在文件路径中)时有一个解决问题的方法,如果可能的话,我只是想在这里了解更多关于这种行为的信息

如果您将AddtheOpenFileDialog放在设计器中并使用它而不是创建新实例,是否会发生同样的情况?一个有趣的想法。所以我们试了一下。直接在窗体上删除打开文件对话框,并在处理程序中使用它。同样的行为。不过还是要谢谢你。测试了你的代码(减去几行你没有发布代码的引用函数的代码),它工作得很好。您是否在新的空WinForms应用程序中尝试过此代码?您是否尝试过只显示对话框而不设置任何其他属性?另外,你能分享一下你的一些研究吗?这些研究让你相信这“并不罕见”?可能是一个shell扩展,它集成到Explorer中,并通过文件打开对话框加载。(例如,类似于显示重叠图标的OrtoiseSVN)。尝试禁用它们。@vesan这里是我在这里发布任何内容之前浏览过的一些链接。它们似乎都主要引用STA。谢谢