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 を押してサービスを停止します --- プロセスを開始します。
それを見つけた:
[スタスレッド]
Process.Start をブロックします。STAThread と Multithreadingを読みましたが、その概念を Process.Start の動作と関連付けることができません。
私の知る限り、Windows.FormにはSTAThreadが必要です。Windows.Form を使用している場合、この問題を回避するにはどうすればよいですか?
地獄のニュース:
アプリケーションを再構築すると、アプリケーションを初めて実行したときは正しく動作しますが、デバッグを停止して iy を再起動すると、問題が発生します。
アプリケーションがデバッガなしで実行された場合、問題は発生しません。