每个流程的进度条

时间:2016-02-13 20:43:18

标签: c# process backgroundworker

我目前正在忙于一个小型C#应用程序,该应用程序读取一个文件夹,然后在每个.rar文件旁边的动态进度条上动态列出Windows窗体上的所有.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();

无法做到这一点。

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

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

您可以尝试使用一个库,例如SevenZipLib http://sevenziplib.codeplex.com/,而不是使用unrar.exe来解压缩程序中的存档。

答案 1 :(得分:1)

问题可能是UNRAR没有输出NewLine,只是继续写入同一行,因此永远不会调用事件处理程序。只有在写入新行时才会调用它。

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