我正在使用 System.Diagnostics 类从我的 C# 应用程序执行一个批处理文件,并在此过程中使用输出更新我的 GUI,但是一旦我的批处理文件超过一定数量的行,该过程就会挂起。行的确切数量似乎有所不同,但我已经能够使用打印“Hello Kitty”316 次的简单批处理文件来重现它:
@echo off
echo Hello Kitty
echo Hello Kitty
等等
如果我删除第 316 行,批处理文件将正常执行,并且表单应用程序的行为与预期一样,但任何更多行都会导致进程无限期挂起,甚至不会产生前 300 个 hello kitties 中的一个。
这是我执行批处理文件的代码:
process = new System.Diagnostics.Process();
process.StartInfo.FileName = batchName;
process.StartInfo.Arguments = " < nul";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.Start();
这些在其他地方声明:
protected Process process;
protected StreamReader output;
我的主要形式是这样的(简化一点):
string output;
while (!proc.Process.HasExited)
{
proc.Process.WaitForExit(200);
if (proc.Process.HasExited)
{
output = proc.Output.ReadToEnd();
rtbStatus.AppendText(output);
}
Application.DoEvents();
}
我不明白它为什么这样做,而且我在网上找到的任何例子都没有提到批处理文件的大小限制。请指教。