gpt4 book ai didi

c# - 从流程中获取实时输出

转载 作者:IT王子 更新时间:2023-10-29 04:42:34 26 4
gpt4 key购买 nike

我的项目有问题。我想启动一个进程,7z.exe(控制台版本)。我尝试了三种不同的方法:

  • Process.StandardOutput.ReadToEnd();
  • OutputDataReceived & BeginOutputReadLine
  • StreamWriter

没有任何作用。它总是“等待”过程结束以显示我想要的内容。我没有任何代码可以放,如果你想要我的代码和上面列出的东西之一。谢谢。

编辑:我的代码:

        process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();

this.sr = process.StandardOutput;
while (!sr.EndOfStream)
{
String s = sr.ReadLine();
if (s != "")
{
System.Console.WriteLine(DateTime.Now + " - " + s);
}
}

或者

process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler(recieve);
process.StartInfo.CreateNoWindow = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
public void recieve(object e, DataReceivedEventArgs outLine)
{
System.Console.WriteLine(DateTime.Now + " - " + outLine.Data);
}

或者

process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = p.StandardOutput.ReadToEnd();
process.WaitForExit();

其中“流程”是我的预制流程

好吧,我知道为什么它不能正常工作:7z.exe 是错误:它在控制台中显示加载百分比,并且仅在当前文件完成时才发送信息。例如,在提取中,它工作正常:)。我将寻找另一种在没有 7z.exe 的情况下使用 7z 函数的方法(可能使用 7za.exe 或某些 DLL)。谢谢大家。要回答这个问题,OuputDataRecieved 事件工作正常!

最佳答案

看看这个页面,看起来这是适合您的解决方案:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline.aspxhttp://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

[编辑]这是一个工作示例:

        Process p = new Process();
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = @"C:\Program Files (x86)\gnuwin32\bin\ls.exe";
p.StartInfo.Arguments = "-R C:\\";

p.OutputDataReceived += new DataReceivedEventHandler((s, e) =>
{
Console.WriteLine(e.Data);
});
p.ErrorDataReceived += new DataReceivedEventHandler((s, e) =>
{
Console.WriteLine(e.Data);
});

p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();

顺便说一下,ls -R C:\递归地列出 C: 根目录下的所有文件。这些文件很多,我敢肯定当第一个结果出现在屏幕上时还没有完成。7zip 有可能在显示之前保留输出。我不确定您为过程提供了哪些参数。

关于c# - 从流程中获取实时输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808663/

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