我正在调用 Process.Start,但它阻塞了当前线程。
pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe");
// Start process
mProcess = new Process();
mProcess.StartInfo = pInfo;
if (mProcess.Start() == false) {
Trace.TraceError("Unable to run process {0}.");
}
即使进程关闭,代码也不再响应。
但是 Process.Start 真的应该阻塞吗?这是怎么回事?
(进程正确启动)
using System;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
class Test
{
[STAThread]
public static void Main()
{
Thread ServerThread = new Thread(AccepterThread);
ServerThread.Start();
Console.WriteLine (" --- Press ENTER to stop service ---");
while (Console.Read() < 0) { Application.DoEvents(); }
Console.WriteLine("Done.");
}
public static void AccepterThread(object data)
{
bool accepted = false;
while (true) {
if (accepted == false) {
Thread hThread = new Thread(HandlerThread);
accepted = true;
hThread.Start();
} else
Thread.Sleep(100);
}
}
public static void HandlerThread(object data)
{
ProcessStartInfo pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe");
Console.WriteLine("Starting process.");
// Start process
Process mProcess = new Process();
mProcess.StartInfo = pInfo;
if (mProcess.Start() == false) {
Console.WriteLine("Unable to run process.");
}
Console.WriteLine("Still living...");
}
}
}
控制台输出为:
--- 按 ENTER 停止服务 --- 启动进程。
找到了:
[STA线程]
使 Process.Start 阻塞。我阅读了STAThread 和 Multithreading,但我无法将这些概念与 Process.Start 行为联系起来。
AFAIK, Windows.Form需要STAThread 。使用 Windows.Form 时如何解决此问题?
地狱新闻:
如果我重建我的应用程序,我第一次运行应用程序时可以正常工作,但是如果我停止调试并再次重新启动,问题就会出现。
在没有调试器的情况下执行应用程序时不会出现问题。