私が作ったプログラムは、プロセスを通して実行可能ファイルを開始するスレッドをスローします。各スレッドはプロセスを開始し、プロセスの出力を文字列(プロセスごとのinfo.additional)にリダイレクトする以下のメソッドを実行します。
私は多くの試行錯誤を経て、出力を特定の方法でリダイレクトする必要があることを知りました。
私はデュアルコアマシン上で実行しています.2つのスレッドを実行してプロセスを開始すると、プログラムは大きく実行され、これらのプロセスの出力を完全にキャプチャします。しかし、私が2つ以上のスレッド(コアを持っているスレッドより多くのスレッド)に移動すると、時々出力がキャプチャされません。どうしてこれなの?そして、誰もこれを修正する方法を知っていますか?
はProcess
オブジェクトが行われる前に、あなたのThreadProc
が出ている、ここでC#、プロセスの出力がキャプチャされないことがある(不一致)?
public void ThreadProc()
{
info.watch.Start();
proc = InstantiateProcess();
proc.Start();
proc.BeginOutputReadLine();
}
private void procOutputDataReceived(object sendingProcess, DataReceivedEventArgs e)
{
if (e.Data != null)
{
//Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
this.info.additional += e.Data.ToString();
}
}
を終了するまでinfo.additionalは、プロセスごとのであるかどうかは明らかではありません。そうでなければ、あなたはそれの周りにロックを置く必要があります。 –
はい、申し訳ありませんが、それぞれのスレッドに対して新しいインスタンスが作成されます。 –