【发布时间】:2015-06-05 03:47:26
【问题描述】:
我这里有这段代码,它启动一个进程等待 8 秒,然后再次杀死它。
for (int i = 0; i < 20; i++)
{
Process pro = new Process();
pro.StartInfo.FileName = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
pro.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
pro.Start();
Thread.Sleep(8000);
try
{
pro.Kill();
Thread.Sleep(1000);
}
catch
{
return;
}
}
当我在调试模式或直接从 .exe 运行应用程序时,它成功启动并终止了进程,但它被冻结了。我不能移动它的窗口或点击其他按钮..
【问题讨论】:
-
这是因为 Win 表单是单线程的,并且没有退出的紧密循环使系统没有空间重新绘制表单或响应鼠标事件。
-
有什么办法可以摆脱这种情况吗?
-
为了不阻塞 UI 线程,你需要异步而不是同步地完成你的工作。
-
@Jeremy 小心,您可以轻松在 win forms 应用程序中使用线程,它只是 UI 线程是他可能的单个线程阻止。
-
我应该说“默认情况下”是单线程的。布拉德利是正确的