現在、私はC#プロジェクトで作業中で、System.Diagnostic.Processクラスを使用しています。スレッドを介して開始されたプロセスを終了する
プログラムの起動時に新しいスレッドが作成され、各スレッド内で別のプロセスが開始されます。
プログラム内の設定をチェックして、各プロセスを継続するか、停止するかを確認する必要がありますが、特定のスレッドによって開始されたプロセスをどのように参照できるかわかりません。各スレッドは、プロセスが開始されたときに名前を付けましたが、私の理解はスレッドを作成し、プロセスを開始し、プロセスがまだ実行中であっても依然として出力を受け取っていてもスレッドを閉じます。
どのプロセスがどのスレッドによって開始されたかを知ることができ、そのプロセスを実行から取り消す方法がありますか。
しかし、私はこのメソッドとこのスレッド名に基づいてプロセスを停止できるように辞書を使用する方法を見ることができません。
更新 以下のリクエストは、スレッド内の各プロセスを作成するために使用しているコードです。私は、outputreceivedイベントから参照できるように、スレッドを辞書に使用していますが、プロセスを終了する必要がある場合は、それを行う方法がわかりません。
Thread worker = new Thread(new ThreadStart(() => startProducts(product.Value[0].startScript, product.Value[0].productName)));
worker.IsBackground = false;
worker.Name = product.Value[0].productName;
worker.Start();
logging.logger(string.Format("Starting product '{0}'", product.Value[0].productName));
スレッドが呼び出すメソッドは次のとおりです。ここでは、各プロセスが開始されます。各プロセスは異なる名前のスレッドを持つことが保証されています。同じ名前を持つスレッドは決して2つありません。
private void startProducts(string startScript, string product)
{
Process startProductProcess = new Process();
startProductProcess.StartInfo.FileName = startScript;
if (configManagement.productConfig[product][0].requireArguments == true)
{
startProductProcess.StartInfo.Arguments = configManagement.productConfig[product][0].arguments;
}
startProductProcess.StartInfo.UseShellExecute = false;
startProductProcess.StartInfo.RedirectStandardOutput = true;
StringBuilder processOutput = new StringBuilder("");
startProductProcess.OutputDataReceived += new DataReceivedEventHandler(startProductProcess_OutputDataReceived);
startProductProcess.Exited += new EventHandler(startProductProcess_Exited);
processTag.Add(startProductProcess, product);
startProductProcess.Start();
//Process localByName = Process.GetProcessById(startProductProcess.Id);
startProductProcess.BeginOutputReadLine();
logging.logger(string.Format("Started {0} with: {1} {2}", product,
startProductProcess.StartInfo.FileName, startProductProcess.StartInfo.Arguments));
}
あなたは辞書を使用して、各プロセスをStatusEnumのようなもので辞書に保存する必要があります。 – SimpleVar
私は出力イベントが発生したと思うので、いくつかのコードを追加して助けてもらうでしょう – Boardy