2010-04-24 51 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線程中處理的用於更新進度條的事件。