【问题标题】:Using chilkat to extract RAR files with progress bar?使用 chilkat 提取带有进度条的 RAR 文件?
【发布时间】:2011-02-11 20:57:17
【问题描述】:

有谁知道在使用 chilkat 时如何显示档案提取的进度?我的表单上已经有一个名为“progressBar1”的进度条。目前整个程序在提取开始时冻结。也许有另一个线程? 我正在使用此代码:

Chilkat.Rar rar = new Chilkat.Rar();

bool success;

success = rar.Open("abc123.rar");
if (success != true) {
    MessageBox.Show(rar.LastErrorText);
    return;
}

success = rar.Unrar("c:/temp/unrarDest/");
if (success != true) {
    MessageBox.Show(rar.LastErrorText);
}
else {
    MessageBox.Show("Success.");
}

如果有人有任何其他方法来提取 .rar 文件,我会很高兴知道。
谢谢。

【问题讨论】:

  • 感谢汤姆·卡班斯基和克里斯·泰伯。我现在使用 BackgroundWorker 组件让它工作,并通过使用“backgroundWorker1.RunWorkerAsync();”调用它。仍然没有弄清楚如何使进度条工作。
  • 我对 chilkat 了解不多,但是如果该库可以在 UnRar 方法从存档中提取时以某种方式生成状态事件,您可以处理这些事件并调用 BackgroundWorker 组件的 ReportProgress 方法.然后在您的表单中处理 BackgroundWorker ProgressChanged 事件,并在该处理程序中增加进度条。请参阅stackoverflow.com/questions/614111/running-class-as-new-thread 了解更多信息。

标签: c# winforms extract extraction rar


【解决方案1】:

你完全正确。您可能希望在后台线程中进行提取。后台线程应该触发事件来更新进度条。确保在调用更新进度条时在事件处理程序中使用 Form.Invoke。

【讨论】:

    【解决方案2】:

    正如汤姆所说,在另一个线程中进行提取是要走的路。一种方法是使用BackgroundWorker 组件。它将触发一个单独的线程,您可以在其中进行提取,并且您可以让它定期引发在 UI 线程中处理的事件以更新进度条。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      相关资源
      最近更新 更多