2012-09-18 6 views
-2

C#, 으로 자바 폴더를 삭제하고 싶지만 조금 문제가 있습니다. C# - 폴더 삭제

private void setDebug(string value) 
{ 
    debug.Text = value; 
} 

private void buildButton_Click(object sender, EventArgs e) 
{ 
    // delete java folder 
    string java_folder = @"C:\Program Files\Java"; 
    if (Directory.Exists(java_folder)) 
    { 
     setDebug("Deleting Java folder..."); 
     Directory.Delete(java_folder, true); 
     progressBar.Value += 10; 
    } 
} 

I 버튼 프로그램 붙어 클릭,하지만 난 줄 Directory.Delete 을 삭제할 때 디버그 레이블을 변경

"java 폴더 삭제 ..."

코드입니다

나는 폴더를 삭제하기 때문에 프로그램이 멈춘다는 것을 압니다.하지만 폴더를 삭제하기 전에 먼저 디버그를 변경하고 싶습니다.

무엇을할까요? 도움을 주셔서 감사합니다 :)

답변

3

코드가 작동하지 않는 이유는 WinForms가 UI 업데이트를 처리하는 방식 때문입니다.

buildButton_Click 메서드가 완료 될 때까지 UI가 다시 표시되지 않으며 그 시간까지 UI가 응답하지 않습니다. Directory.Delete 라인은 실행하는 데 오랜 시간이 걸리므로 프로그램이 "스틱"하고 디버그 레이블이 보이지 않습니다.

스레딩 사용 방법을 살펴 보려면 스레드, 작업 또는 BackgroundWorker 클래스를 읽고 어떻게 작동하는지 이해하십시오. 그런 다음 직접 메서드에서 Directory.Delete을 호출하는 대신 해당 기술 중 하나를 사용하여 백그라운드 스레드에서 삭제를 실행하십시오.

1

은이 같은 다른 스레드에서 코드를 포장해야합니다

private void setDebug(string value) 
{ 
    debug.Text = value; 
} 

private void buildButton_Click(object sender, EventArgs e) 
{ 
    BackgroundWorker worker = new BackgroundWorker(); 
    string java_folder = @"C:\Program Files\Java"; 
    if (Directory.Exists(java_folder)) 
    { 
     setDebug("Deleting Java folder..."); 
     worker.DoWork += (s, args) => // this is the off-thread code 
     { 
      // delete java folder 
      Directory.Delete(java_folder, true); 
     }; 
     worker.RunWorkerCompleted += (s,args)=> // this goes off when .DoWork is done 
     { 
      progressBar.Value += 10; 
     }; 

     // this invokes .DoWork handler (which we defined above) 
     worker.RunWorkerAsync(); 
    } 
} 
+0

덕분에 형제가, 정말 많이 도와 : –

+0

천만에요. 문제가 해결되면 허용 된 것으로 표시해주세요. 장래 방문자는 동일한 상황에서 유용하다는 것을 알고 있습니다. – Alex

+0

오, 내게 보여줘 "다른 지역을 나타내는"부모 또는 현재 "범위에서 사용 된 aleardy 인 '보낸 사람'에게 다른 의미를 부여하기 때문에 '샌더'라는 지역 변수를 선언 할 수 없습니다." –