每个进程的进度条
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# 库并且适用于几乎所有格式。
我目前正忙于一个小型 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# 库并且适用于几乎所有格式。