2014-01-22 2 views
-1

내 win form 응용 프로그램에서 백그라운드 작업자를 사용하고 있습니다. 장기 실행 프로세스의 진행률 막대 폼을 보여주고 있으며 장기 실행 프로세스가 백그라운드 작업자에 있습니다.백그라운드 창 작업자의 응용 프로그램 C#은 UI를 차단하지 않습니다.

참고 : 나는 배경 작업자를 사용하여 선택 윤곽 스타일로 진행률 표시 줄을 표시했습니다.

문제점 배경 작업자로 인해 사용자 인터페이스가 반응하지만 응답하지 않기를 바랍니다.

내 코드는 다음과 같습니다 :

ProgressBarForm progForm = new ProgressBarForm(); 
progForm.Show(); 
BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork+= myMethod; 
worker.RunWorkerAsync(); 
+1

그런 다음 백그라운드 작업자 대신 UI 스레드에서 수행 하시겠습니까? 하지만 UI가 응답하지 않는 이유는 무엇입니까? 진행률 표시 줄이 채워지지 않습니다. –

+1

UI가 응답하지 않게하려면 배경 작업자를 사용하는 이유는 무엇입니까? 이것은 의미가 없습니다. –

+0

내가 방금 읽은 것은 ... – JuStDaN

답변

6

당신은 진행률을 표시하는 양식을 사용하는 점을 감안하면 ShowDialog 대신 Show를 사용할 수 있습니다. 그러면 창이 모달 대화 상자로 열리고 진행 창이 닫힐 때까지 기본 창에 대한 UI 작업이 차단됩니다.

  • ShowDialog가 차단 호출, 그래서 배경 노동자를 시작한 후 호출 :

    몇 가지 고려할 사항.

  • 사용자가 창을 닫을 수 없으며, 백그라운드 작업자가 완료된 후에 프로그래밍 방식으로 창을 닫아야합니다.
+0

감사합니다. Bas Brekelmans 나는 당신의 제안을 시도하고 내가 원하는 결과를 얻었습니다. –

1

사용자 인터페이스를 사용하지 않으려면 .Enabled = false를 설정하십시오. 각 폼 컨트롤에서 _RunWorkerCompleted의 변경 내용을 취소합니다.

취소/닫기 버튼을 사용하도록 설정해야합니다. :)

관련 문제