以下代码适用于ping stackoverflow.com
和大多数其他情况,但是当我使用7z.exe时,它不是实时的,它等待直到压缩目录然后显示输出。我用于压缩的参数是a test.7z dirpath
。我可以做别的吗?
private ProcessStartInfo GetProcessStartInfo(string filename, string arguments)
{
ProcessStartInfo ProcessStartInfo = new ProcessStartInfo();
ProcessStartInfo.CreateNoWindow = true;
ProcessStartInfo.UseShellExecute = false;
ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ProcessStartInfo.RedirectStandardOutput = true;
ProcessStartInfo.RedirectStandardError = true;
ProcessStartInfo.RedirectStandardInput = true;
ProcessStartInfo.FileName = filename;
ProcessStartInfo.Arguments = arguments;
}
private void ProcessRun(string filename, string arguments)
{
Process Process = new Process();
Process.StartInfo = GetProcessStartInfo(filename, arguments);
Process.ErrorDataReceived += Process_OutputDataReceived;
Process.OutputDataReceived += Process_OutputDataReceived;
Process.EnableRaisingEvents = true;
Process.Start();
Process.BeginOutputReadLine();
Process.BeginErrorReadLine();
Process.WaitForExit();
}
public ObservableList<string> Output = new ObservableList<string>();
private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Output.Add(e.Data);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
OutputListBox.ItemsSource = Output;
ProcessRun("cmd.exe", "/c ping stackoverflow.com");
}
7zip输出:
7zip进度:
答案 0 :(得分:1)
如果你对百分比感兴趣,那你就不幸了 - 这不是通过标准输出完成的。标准输出仅处理数据流,而百分比输出实际上是通过直接操作控制台来完成的。它不是输出流的一部分 - 使用标准I / O流无法复制相同的效果。
所以这不是你的代码的问题。如果您只想使用命令提示符查看相同的问题,请尝试运行此命令:
7z.exe yourarguments > log.txt
>
是输出重定向 - 而不是写入控制台,标准输出被重定向到文件。与ping
一起使用时,它会立即打印出标准输出。当您使用7zip时,您获得与C#应用程序相同的结果。