每个进程的进度条

本文关键字:进程 | 更新日期: 2023-09-27 18:34:26

我目前正忙于一个小型 C# 应用程序,该应用程序读取一个文件夹,然后动态列出 Windows 窗体上的所有.rar文件,每个.rar文件旁边都有一个动态进度条。因此,基本上只需按一下按钮,.rar文件就需要解压缩(winrar 命令行),显示每个进程的进度。

下面是我的流程片段

Process proc = new Process();
proc.StartInfo.FileName = @"unrar.exe";
proc.StartInfo.Arguments = FileName + "whatever attributes/switches";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
proc.Start();
proc.BeginOutputReadLine();
proc.WaitForExit();

很难做到这一点。

帮助将不胜感激。

每个进程的进度条

如果 unrar.exe 将进度输出到标准输出,您可以尝试解析它以更新进度条。

与其使用 unrar.exe 从程序中解压缩存档,不如尝试使用库,如 SevenZipLib http://sevenziplib.codeplex.com/。

问题可能是 UNRAR 不输出换行符,只是一直写入同一行,因此永远不会调用事件处理程序。只有在写入新行后才会调用它。

我会选择西蒙的解决方案并尝试使用 7zip 代替。它更友好,有一个很棒的C#库,几乎适用于所有格式。