using System.Windows.Forms;
public class App
{
[STAThread]
public static void Main()
{
string fname;
using (var d = new OpenFileDialog())
{
if (d.ShowDialog() != DialogResult.OK)
{
return;
}
fname = d.FileName;
}
//Application.ExitThread();
for (; ;)
;
}
}
上面的代码展示了一个文件对话框。一旦我选择了一个文件并按下“打开”按钮,for循环就会执行,但是(冻结的)对话框仍然存在。
一旦我取消注释
Application.ExitThread()
,对话框就会如预期般消失。这是否达到了预期效果?为什么
using
不能让窗口消失?在哪里可以找到更多信息?
ShowDialog
方法内部运行一个消息循环,只要它在屏幕上显示。但是一旦用户关闭它,消息循环就会消失。没有人再泵送消息,违反了STA线程的条件。实际上,你的应用程序已经变得愚蠢了,因为它被锁在一个紧密的无限循环中。 - Cody Gray