每个进程的进度条

Progress Bar for each process

我目前正忙于一个小型 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将进度输出到标准输出,您可以尝试解析它以更新进度条。

您可以尝试使用库,例如​​ SevenZipLib http://sevenziplib.codeplex.com/.

,而不是使用 unrar.exe 从您的程序中解压缩档案

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

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