我需要爲循環中的許多文件執行我的控制檯應用程序並更新我的GUI。當我第一次執行我的應用程序時,一切正常,GUI更新實時完成。但是隨着每一次迭代,控制檯輸出的讀取會得到更長的延遲。 3-4文件後,我只得到幾個更新或根本沒有更新。它不是更新GUI的問題,我的dataraceivedevent不會啓動。C#在循環中讀取控制檯應用程序
我不明白爲什麼,因爲在每次迭代之後,我都會關閉並處理我的過程。
這是我在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);
}
問題有時候我需要等待一小時,有時候只需幾分鐘。常數值對我來說不是一個解決方案。 – user1755589
您可能想要查看此鏈接:http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.standarderror.aspx 「該代碼示例通過調用p.StandardError來避免死鎖情況。在p.WaitForExit之前的ReadToEnd如果父進程在p.StandardError.ReadToEnd之前調用p.WaitForExit並且子進程寫入足夠的文本來填充重定向的流,則可能會導致死鎖情況。父進程將無限期地等待子進程退出。子進程將無限期地等待父進程從完整的StandardError流中讀取。「 – manman