为什么OpenFileDialogue会导致C#Forms应用程序调试失败?
在过去的两天里,我一直在试图找到解决这个问题的方法。基本上,在调试表单应用程序时,我有一个带有onclick事件处理程序的按钮。下面是我的处理程序中的代码为什么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
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。谢谢