BackgroundWorker
과 Thread
의 차이점은 무엇입니까? 내 응용 프로그램에서는 데이터베이스와 정기적으로 통신하는 메시징 시스템을 사용하고 있습니다. 어느 것을 여기에서 사용하고 싶습니까? BackgroundWorker
또는 Thread
?BackgroundWorker와 Thread의 차이점은 무엇입니까?
답변
BackgroundWorker은 WinForms에서 사용할 준비가 된 클래스이므로 UI가 멈추는 것을 피하는 백그라운드 스레드에서 작업을 실행할 수 있으며이 기능 외에도 주 스레드에서 성공 콜백의 실행을 쉽게 마샬링 할 수 있습니다. 결과로 사용자 인터페이스를 업데이트 할 수있는 가능성. 또한 진행 상황을 추적하고 작업을 취소 할 수있는 가능성을 제공합니다. 스레드 풀의 스레드를 사용합니다.
한편 Thread은 새로운 thread에서 일부 작업을 간단하게 실행할 수있는 클래스입니다. 그것은 훨씬 더 기본적인 개념입니다.
BackgroundWorker는 이미 진행률, 완료 및 취소보고 기능을 구현 했으므로 직접 구현할 필요가 없습니다. 스레드 사용은 비동기 프로세스 실행 (예 : 스레드 우선 순위 또는 전경/백그라운드 스레드 유형 선택)에 대한 제어를 강화합니다.
때때로 진행보고 및 기타 BackgroundWorker 작업이 필요하지 않으므로 Thread/ThreadPool이 좋은 대안이 될 수 있습니다.
BackgroundWorker는 ThreadPool의 스레드를 사용하며 스레드는 자신의 스레드를 만듭니다. 또한 호출 스레드에보고하는 이벤트 기간에 몇 가지 기능이 있습니다.
BackgroundWorker는 할당 할 메서드를 할당 할 수있게 해주는 스레드 구현입니다.
작업을 중지하고 진행 상황을 추적하며 비동기 적으로 알림을받을 수있는 통신 API를 제공합니다.
BackgroundWorker를 사용하십시오. 어쨌든 스레드를 캡슐화하여 작업하기가 더 쉽습니다. 이 API의 장점 중 하나는 API를 사용하면 간단한 이벤트 기반 모델에서 진행 상황을보고 할 수 있으며 해당 이벤트 호출은 UI 스레드로 올바르게 라우팅되므로 Invoke 메서드를 사용하여 호출을 마샬링 할 필요가 없습니다.
BackgroundWorker
class은 Thread
클래스에서 파생되지 않지만 스레드를 직접 만들고 작성한 것보다 훨씬 쉽게 작업을 관리 할 수 있습니다. 스레드가 시작될 때 발생 -
DoWork
가 :그것은 세 가지 주요 이벤트를 발생시킵니다.
ProgressChanged
- 주 UI 스레드로 진행 상황을보고하기 위해 발생합니다.RunWorkerCompleted
- 스레드가 완료되면 발생합니다.
RunWorkerAsync()
을 호출 한 후 스레드가 수행중인 작업을 모니터링 할 수 있습니다.
BackgroundWorker가 스레드를 캡슐화합니까? 무슨 말을하는거야? 비동기 적으로 호출되는 캡슐화 된 대리자가 있습니다. –
@ lazyberezosky - 네 말이 맞아. 나는 틀린 용어를 사용했다. 나는 대답을 업데이트 할 것이다. – ChrisF
큰 차이가 있다고 생각합니다. BackgroundWorker에서 호출하는 메서드에서 UI 구성 요소를 사용하려고하면 전혀 작동하지 않습니다. BackgroundWorker는 실제로 백그라운드 프로세스이므로 인터페이스 작업을 사용할 수 없습니다.예를 들어, 메서드에서 BackgroundWorker가 호출 할 새 레이블을 만들면 오류가 발생합니다.
- 1. BackgroundWorker와 System.Threading.Thread의 차이점
- 2. java.lang.ThreadLocal이 ThreadLocal 대신에 Thread의 맵입니까?
- 3. Thread의 run() 메서드의 마지막 열거 형
- 4. Java에서 Thread의 사용자 정의 구현 : JNI가 가능합니까?
- 5. Databinder.Eval과 Container.DataItem의 차이점은 무엇입니까?
- 6. static_cast와 Implicit_cast의 차이점은 무엇입니까?
- 7. NSNumber와 NSInteger의 차이점은 무엇입니까?
- 8. Phing과 PHPUnderControl의 차이점은 무엇입니까?
- 9. WPF와 WinForms의 차이점은 무엇입니까?
- 10. CreateWnd와 CreateWindowHandle의 차이점은 무엇입니까?
- 11. ImageMagick과 GraphicsMagick의 차이점은 무엇입니까?
- 12. Pingback과 Trackback의 차이점은 무엇입니까?
- 13. @property와 @synthesize의 차이점은 무엇입니까?
- 14. php.ini와 .htaccess의 차이점은 무엇입니까?
- 15. 메서드와 선택기의 차이점은 무엇입니까?
- 16. 탄소와 코코아의 차이점은 무엇입니까?
- 17. String.Intern과 String.IsInterned의 차이점은 무엇입니까?
- 18. Int32와 UInt32의 차이점은 무엇입니까?
- 19. Knockout.js와 Rx.js의 차이점은 무엇입니까?
- 20. Server.Transfer와 Response.Redirect의 차이점은 무엇입니까?
- 21. MSP430과 MSP430X의 차이점은 무엇입니까?
- 22. COM과 DCOM의 차이점은 무엇입니까?
- 23. DomainKeys와 DKIM의 차이점은 무엇입니까?
- 24. 추상화와 외관의 차이점은 무엇입니까?
- 25. 면도기와 ASPX의 차이점은 무엇입니까?
- 26. 이 코드의 차이점은 무엇입니까?
- 27. Setting.settings와 web.config의 차이점은 무엇입니까?
- 28. Framework.Triggers와 Style.Triggers의 차이점은 무엇입니까?
- 29. PHP와 표현의 차이점은 무엇입니까?
- 30. ListView와 GestureListView의 차이점은 무엇입니까?
ThreadPool을 언급하기 위해 +1 – spender