DoWork에서 ReportProgress() 메서드를 호출하여 ProgressChangedEvent 이벤트 처리기를 사용하여 UI를 업데이트 할 수있는 경우 Dispatcher.BeginInvoke() 메서드를 사용하여 UI를 업데이트해야하는 이유는 누구나 WPF에서 알 수 있습니까? 이벤트 이벤트 핸들러? 백그라운드 작업자와 디스패처에 대한 이해가 잘못 되었습니까?BackgroundWorker 및 Dispatcher.BeginInvoke (WPF)
0
A
답변
2
당신이 기억해야 할 하나의 규칙이있다 : UI를 업데이트
는 UI 스레드에서 수행 할 필요가.디스패처 을 발송자는 BeginInvoke를 호출 할 때, 스레드 디스패처에 메소드를 실행한다 객체이다이 점을 염두에 유지
는,의 어떤 발송자가 수행하고 무엇 BackgroundWorker에가하는 보자 만들어졌습니다. 응용 프로그램의 디스패처는 항상 UI 스레드에서 만들어 지므로 작동합니다.
배경 노동자 배경 노동자는 이벤트 기반 API 제공하지만, 매우 유사하다 : 당신이 DoWork-방법 내부 ReportProgress
를 호출 할 때 이는있는 BackgroundWorker가 배경 노동자이었다 스레드에서 이벤트를 발생시킬 것 만들어진. 따라서 UI 스레드에서 Background-Worker를 만들면 ProgressChanged 이벤트 처리기에서 UI를 업데이트 할 수 있습니다.
2
Dispatcher를 호출 할 필요없이 BackgroundWorker의 ProgressChanged 핸들러에서 UI를 안전하게 업데이트 할 수 있습니다.
ReportProgress을 호출 할 때마다 ProgressChanged 이벤트가 발생합니다. 일반적으로 UI 스레드 인 BackgroundWorker 인스턴스를 만든 스레드에서 실행됩니다. ReportProgress의 설명 부분에서
:
ReportProgress 방법에 대한 호출은 비동기 즉시 를 반환합니다. ProgressChanged 이벤트 처리기는 BackgroundWorker를 만든 스레드 에서 실행됩니다.
관련 문제
- 1. WPF Dispatcher.BeginInvoke 위임 문제
- 2. wpf 스레딩, backgroundworker, 디스패처
- 3. Dispatcher.BeginInvoke C#
- 4. WPF C# BackgroundWorker 메서드 사용
- 5. wpf BackgroundWorker - UI 업데이트 관련
- 6. WPF BackgroundWorker ListView 필터 문제
- 7. WPF BackgroundWorker 예외 메시지 표시
- 8. BackgroundWorker 및 ClipBoard
- 9. 는 Dispatcher.BeginInvoke 항상 상태
- 10. 클로저 및 BackgroundWorker 이벤트 처리기
- 11. BackgroundWorker 및 CollectionViewSource
- 12. 가장 및 BackgroundWorker
- 13. BackgroundWorker 및 foreach 루프
- 14. BackgroundWorker 및 ConcurrentQueue
- 15. BackgroundWorker 및 Progressbar.Show()
- 16. BackgroundWorker 및 공유 클래스
- 17. Timer Object 및 BackgroundWorker
- 18. documentviewer 및 backgroundworker
- 19. WebBrowser 및 BackgroundWorker VB
- 20. Add-in express 및 BackGroundWorker 스레딩
- 21. WPF BackGroundWorker ProgressChanged가 텍스트 블록을 업데이트하지 않습니다.
- 22. Dispatcher.BeginInvoke()의 동작에 혼란이 있음
- 23. backgroundWorker
- 24. Dispatcher.BeginInvoke C#, silverlight
- 25. Dispatcher.BeginInvoke 올바른 사용법?
- 26. BackgroundWorker 스레드에서 FlowDocument 만들기
- 27. BackgroundWorker 취소 (루프없는 단일 메서드)
- 28. BackgroundWorker 스레드 및 타이머 논리
- 29. UI의 BackgroundWorker 및 업데이트 컨트롤
- 30. BackgroundWorker 및 대용량 파일 삭제
답변에서 언급했듯이 진행 중이거나 완료된 처리기의 UI 만 DoWork 이벤트 처리기에서 업데이트하면 안됩니다. –