我打電話給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