2010-04-24 59 views
0

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

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文件,这将是巨大的了解。
谢谢。

+0

谢谢Tom Cabanski和Chris Tybur。我现在使用BackgroundWorker组件工作,并通过使用“backgroundWorker1.RunWorkerAsync();”来调用它。还没有想出如何使进度条工作。 – 2010-04-24 16:20:17

+0

我对chilkat了解不多,但是如果该库可以以某种方式在从存档中提取UnRar方法时生成状态事件,则可以处理这些事件并调用BackgroundWorker组件的ReportProgress方法。在你的表单中,你将会处理BackgroundWorker的ProgressChanged事件,并且在那个处理程序中你会增加你的进度条。有关更多信息,请参阅http://stackoverflow.com/questions/614111/running-class-as-new-thread。 – 2010-04-24 16:37:11

回答

2

你完全正确。你会想在后台线程中进行提取。后台线程应该触发事件来更新进度条。请确保在您的事件处理程序中使用Form.Invoke,当您拨打电话更新进度栏。

2

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