2010-04-24 5 views
0

누구든지 chilkat을 사용할 때 압축 파일 압축 풀기 과정을 보여주는 방법을 알고 있습니까? 내 양식에 progressBar1이라는 진행률 표시 줄이 이미 있습니다. 현재 추출이 시작될 때 전체 프로그램이 정지됩니다. 어쩌면 다른 스레드가 있을까요? 이 코드 사용하고 있습니다 : 사람이 .rar 파일을 추출 할 수있는 다른 방법이있다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."); 
} 

경우, 알고 좋은 것입니다.
감사합니다.

+0

감사합니다. Tom Cabanski와 Chris Tybur. 지금 BackgroundWorker 구성 요소를 사용하고 "backgroundWorker1.RunWorkerAsync();"를 사용하여 호출합니다. 아직 진행률 표시 줄을 작동시키는 방법을 알아 내지 못했습니다. –

+0

chilkat에 대해 많이 알지는 못하지만 UnRar 메서드가 아카이브에서 추출되는 동안 라이브러리가 어떻게 든 상태 이벤트를 생성 할 수 있다면 해당 이벤트를 처리하고 BackgroundWorker 구성 요소의 ReportProgress 메서드를 호출 할 수 있습니다. 그런 다음 폼에서 BackgroundWorker ProgressChanged 이벤트를 처리하고 해당 핸들러에서 진행률 막대를 증가시킵니다. 자세한 내용은 http://stackoverflow.com/questions/614111/running-class-as-new-thread를 참조하십시오. –

답변

2

정확합니다. 백그라운드 스레드에서 압축을 풀고 싶을 것입니다. 백그라운드 스레드는 진행률 표시 줄을 업데이트하기 위해 이벤트를 실행해야합니다. 진행률 표시 줄을 업데이트 할 때 이벤트 핸들러에서 Form.Invoke를 사용해야합니다.

2

Tom이 말했듯이 다른 스레드에서 추출을하는 것이 좋습니다. 이를 수행하는 한 가지 방법은 BackgroundWorker 구성 요소를 사용하는 것입니다. 추출을 할 수있는 별도의 스레드에서 실행되며 진행률 표시 줄을 업데이트하기 위해 UI 스레드에서 처리되는 이벤트를 주기적으로 발생시킬 수 있습니다.

관련 문제