내 코드에서 두 개의 BackgroundWorkers가 있습니다. 하나는 작업을 수행하고 둘은 함께 실행되므로 두 번째 작업이 완료 될 때까지 기다릴 필요가 있음을 의미합니다. 내가 작업 할 때 주 윈도우를 클릭 할 때 크래시가 발생합니다. 어떻게해야합니까?WFP BackgroundWorker가 다른 BackgroundWorker가 완료 될 때까지 기다림
0
A
답변
2
첫 번째 일은 아마도 1 BackgroundWorker
에서 모든 배경 작업을 수행 할 수 있습니다.
질문에 대한 답변을 얻으려면 1 번째 RunWorkerCompleted 이벤트 처리기에서 2 번째 BackgroundWorker
을 시작할 수 있습니다.
bw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw1_RunWorkerCompleted);
private void bw1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//celebration!
//and then start the 2nd BackgroundWorker
BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += new DoWorkEventHandler(bw2_DoWork);
bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2_RunWorkerCompleted);
bw2.RunWorkerAsync();
}
+0
테스트 할 것입니다 ... RunWorkerCompleted 이벤트를 사용하면 주 스레드에서 실행됩니다 ... – user3719173
+0
예,'RunWorkerCompleted'는 주 스레드에서 실행됩니다. 이것이 BackgroundWorker가 발명 된 이유이며, 일부 사람들은 UI를 업데이트하기 위해 메인 스레드에 마샬링해야한다는 것을 인식하지 못합니다. – kennyzx
관련 문제
- 1. BackgroundWorker가 완료 될 때까지 어떻게 기다려야합니까?
- 2. BackgroundWorker가 완료 될 때까지 PictureBox를 사용 중지하거나 더 간단한 방법으로
- 3. 이벤트가 완료 될 때까지 기다림
- 4. 컴파일이 완료 될 때까지 기다림
- 5. UIAutomation 테스트 타이머가 완료 될 때까지 기다림
- 6. ssh가 스크립트가 완료 될 때까지 기다림
- 7. AppDelegate에서 CKQuery 실행 - 완료 될 때까지 기다림
- 8. $ .when을 사용하여 아약스가 완료 될 때까지 기다림
- 9. 스위프트 - 기능이 완료 될 때까지 기다림
- 10. Java - 타사 스레드가 완료 될 때까지 기다림
- 11. 여러 프로세스가 예상대로 완료 될 때까지 기다림
- 12. Ajax 루프를 요청하고 완료 될 때까지 기다림
- 13. 웹 요청이 완료 될 때까지 기다림
- 14. libpq - PQsendQuery가 완료 될 때까지 기다림
- 15. Xcode에서 작업이 완료 될 때까지 기다림
- 16. JavaFX WebEngine이 아약스가 완료 될 때까지 기다림
- 17. flex 4 - 동결없는로드가 완료 될 때까지 기다림
- 18. 동기식 startActivityForResult - 완료 될 때까지 기다림
- 19. XAML 레이아웃이 완료 될 때까지 기다림
- 20. ios 블록이 완료 될 때까지 기다림
- 21. 배치 파일을 호출하고 완료 될 때까지 기다림
- 22. WPF BackgroundWorker가 sub-usercontrol에서 MainWindow로 업데이트 완료
- 23. .Net BackgroundWorker가 응답하지 않습니다.
- 24. BackgroundWorker가 작동하지 않습니다. Async
- 25. Azure 시작 작업, 다른 모든 작업이 완료 될 때까지 기다림
- 26. BackgroundWorker가 컬렉션 항목에 사용되었습니다.
- 27. BackgroundWorker가 두 클래스 이상
- 28. BackgroundWorker가 올바르게 작동 함
- 29. BackgroundWorker가 GUI를 고정 시켰습니다
- 30. BackgroundWorker가 다른 것을 기다릴 수 있습니까?
'나는 작업 중에 메인 윈도우를 클릭 할 때 응용 프로그램을 중단시키지 마십시오.'유일한 방법은 신중하게 테스트하고 코드를 디버깅하는 것입니다. – kennyzx
기본적으로 [동기화] (http://www.albahari.com/threading/part2.aspx)에 대해 묻지 만 함께 실행할 수없는 경우 * 왜 두 개의 'BackgroundWorker'가 필요합니까? 하나를 가지고 두 가지 작업 중 하나를 선택하기위한 매개 변수를 제공하십시오. – Sinatr
* 작업 *을 사용하지 않는 이유는 무엇입니까? 또는 * async/C# 5의 경우 기다리고 있습니까? 이 두 가지 방법 모두 훨씬 쉬우 며 시나리오에 대한 지원이 기본 제공됩니다. – galenus