私は現在、System.Diagnostic.Process メソッドを使用して構成ファイル内のいくつかのスクリプトを起動する ac# プロジェクトに取り組んでいます。
新しいスレッドを作成し、プロセス情報を設定してプロセスを開始し、そのスクリプトからの出力を c# プログラムにリダイレクトすることによって開始する必要がある各スクリプトをループする foreach ループがあります。次に、Process.OutputDataReceived イベントを使用して、プログラムが出力を受信したときにトリガーします。
OutputDataReceived イベント ハンドラーで、イベントをトリガーしたスレッドの名前を特定する方法はありますか。
以下のコードは、スレッドを作成し、スレッドを開始します。
public void prepareProductStart()
{
foreach ( ConfigManagement.ProductSettings product in configManagement.productSettings )
{
worker = new Thread(() => startProducts(product.startScript));
worker.IsBackground = false;
worker.Name = product.productName;
worker.Start();
}
スレッドが開始されると、出力イベントをトリガーするこのメソッドを呼び出します
private void startProducts(string startScript)
{
//Thread productThread = new Thread();
Process startProductProcess = new Process();
startProductProcess.StartInfo.FileName = startScript;
startProductProcess.StartInfo.UseShellExecute = false;
startProductProcess.StartInfo.RedirectStandardOutput = true;
StringBuilder processOutput = new StringBuilder("");
startProductProcess.OutputDataReceived += new DataReceivedEventHandler(startProductProcess_OutputDataReceived);
startProductProcess.Start();
startProductProcess.BeginOutputReadLine();
}
出力イベントは次のようになります。このイベントは、スレッドの名前を決定して、出力をどう処理するかを知る必要があります。
private void startProductProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
//Find thread name and perform event based on thread name
}
ご協力いただきありがとうございます。