ループ内の多くのファイルに対してコンソールアプリを実行し、GUIを更新する必要があります。初めてアプリを実行すると、すべて問題なく、GUIの更新がリアルタイムで行われます。ただし、反復するたびに、コンソール出力の読み取りの遅延が長くなります。3〜4個のファイルを使用した後、更新がほとんどないか、まったく更新されていません。GUIの更新に問題はなく、dataraceivedeventが起動しません。
繰り返しごとにプロセスを閉じて破棄するため、理由がわかりません。
これは、forループで実行するメソッドです。
public void execute(string arguments, string path)
{
Process myProcess = new Process();
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.FileName = path;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.Arguments = arguments;
myProcess.Start();
myProcess.BeginOutputReadLine();
myProcess.OutputDataReceived += new DataReceivedEventHandler(this.updateProgress);
myProcess.WaitForExit();
myProcess.CancelOutputRead();
myProcess.OutputDataReceived -= updateProgress;
myProcess.Close();
myProcess.Dispose();
if (progressBar1.InvokeRequired)
{
progressBar1.BeginInvoke(new Action(() =>
{
progressBar1.PerformStep();
}));
}
else
{
progressBar1.PerformStep();
}
if (progressBar2.InvokeRequired)
{
progressBar2.BeginInvoke(new Action(() =>
{
progressBar2.Value = 100;
progressBar2.Refresh();
}));
}
else
{
progressBar2.Value = 100;
progressBar2.Refresh();
}
if (this.InvokeRequired)
{
this.BeginInvoke(new Action(() =>
{
this.Text = " ";
}));
}
else
{
this.Text = " ";
}
Thread.Sleep(500);
}