最近我的应用程序没有正常关闭时出现问题。 在告知退出后,当我查看任务管理器时,该进程仍在运行,我无法终止该进程。
突然间,我意识到一种奇怪的模式。只有在应用程序运行时随时打开OpenFileDialog时才会出现关闭问题。我调试了一下,看到一些线程在应用程序退出后没有关闭。另外,令我惊讶的是,当我调用OpenFileDialog.ShowDialog()时,它产生了很多线程(见下图)。线程在应用程序的生命周期内都是活动的。
为什么OpenFileDialog会产生这么多线程?为什么文件对话框关闭后它们没有关闭。
OpenFileDialog问题与我的关机问题有什么关系......?
在openFileDialog.ShowDialog()之前的线程:
对话框打开时的线程:
在openFileDialog.ShowDialog()返回后立即执行线程:
应用程序关闭后挂起的线程:
打开对话框的代码:
private void startAllSequenceToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofn = new OpenFileDialog();
DialogResult result = ofn.ShowDialog();
if (result == DialogResult.Cancel)
return;
MessageBox.Show("do stuff");
}
答案 0 :(得分:3)
我在网上搜索此内容并发现什么,但我通过调用Dispose来解决问题。代码如下:
private void startAllSequenceToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofn = new OpenFileDialog();
DialogResult result = ofn.ShowDialog();
if (result == DialogResult.Ok)
{
MessageBox.Show("do stuff");
}
// This one line seems to allow my application to exit cleanly in debug and release.
// But I don't instantiate a new object.
// I used the control on the form and called Dispose from form_closing.
ofn.Dispose();
}
答案 1 :(得分:1)
这个帖子OpenFileDialog/c# slow on any file. better solution?有一些不错的答案。总而言之,作为最后的手段,请与sysinternals的ProcExp一起检查。此外,调试器中它只是慢吗?如果是这样,我不会担心它,因为它不会影响您的用户。只需确保与其他代码隔离,这样您的团队就不会在调试器中经常绊倒它,因为它很慢。