【问题标题】:Progress Bar for each process每个进程的进度条
【发布时间】:2016-02-14 06:30:29
【问题描述】:

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

下面是我的流程sn-p

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 二进制输出是什么?这显然与确定完成进度有关...
  • 我无法让进度条与流程一起工作。如果我有例如 5 个 rar 文件,我需要使用它的进度条运行第一个进程,一旦完成,移动到第二个进程等。目前所有进程运行/完成,然后一次显示所有进度条。
  • 这是 unrar UNRAR 4.00 beta 4 免费软件的输出 Copyright (c) 1993-2011 Alexander Roshal Extracting from filename.rar Extracting d:\test\test\filename.mp4 0% 1% 2 % 3% 从 filename.r00 ... filename.mp4 中提取 4% 5% 6% 7% 从 filename.r01 ... filename.mp4 中提取 8% 9% 10% ... ... 从文件名.r26 ... 文件名.mp4 98% 99% OK 一切OK

标签: c# process backgroundworker


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多