gpt4 book ai didi

c# - 从 C# 执行大型批处理文件时遇到问题

转载 作者:太空狗 更新时间:2023-10-30 00:43:20 25 4
gpt4 key购买 nike

我正在使用 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();
}

我不明白为什么要这样做,而且我在网上找到的示例中也没有提到批处理文件的大小限制。请指教。

最佳答案

您需要连续读取输出 - 您不能等到最后。

输出将被缓冲,因此在进程挂起之前可以写入少量(通常约为 4KB)。

另一种方法是将输出定向到一个文件,然后读取该文件。

关于c# - 从 C# 执行大型批处理文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com