我打电话给Process.Start,但它阻塞当前线程。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键停止服务--- 启动过程。
发现:
[STAThread]
使的Process.Start阻塞。我读了STAThread and Multithreading,但我无法将这些概念与Process.Start行为联系起来。
AFAIK,STAThread是必需由Windows.Form。如何在使用Windows.Form时解决此问题?
新闻为地狱:
如果我重建我的应用程序时,第一一次正确运行的应用程序的工作,但如果我停止调试并重新启动IY,问题araise。
在没有调试器的情况下执行应用程序时,不会引发问题。
将'UseShellExecute'和'ErrorDialog'设置为true,看看是否有错误产生。 – AMissico 2010-06-19 19:34:41
考虑到我们不知道“cDaemon”课程的作用,很难说出发生了什么。请尝试拿出一个简短但完整的*程序来证明问题。 – 2010-06-19 19:36:38
(使用Application.DoEvents结合Console.Read看起来很可疑) – 2010-06-19 19:40:02