BackgroundWorker
和Thread
有什麼區別?在我的應用程序中,我使用了一個定期與數據庫通信的消息系統。我想在這裏使用哪一個:BackgroundWorker
或Thread
?BackgroundWorker和線程之間的區別?
回答
A BackgroundWorker是一個可以在WinForms中使用的類,允許您在後臺線程上執行任務,避免凍結UI,此外還允許您輕鬆地在主線程上編組成功回調的執行,用結果更新用戶界面的可能性。它還可以跟蹤進度並取消任務。它使用線程池中的線程。
BackgroundWorker已經實現了報告進度,完成和取消的功能 - 所以你不需要自己實現它。 線程的使用使您可以更好地控制異步進程執行(例如,線程優先級或選擇前臺/後臺線程類型)。
順便說一句,有時你不需要進度報告和其他BackgroundWorker的東西 - 所以Thread/ThreadPool將是很好的選擇。
BackgroundWorker使用ThreadPool中的線程,使用Thread創建自己的線程。此外,在調用線程的事件報告方面還有一些設施。
BackgroundWorker是一個線程實現,它允許您分配一個要完成的方法。
它爲您提供了一個通信API,允許您停止工作,跟蹤進度以及異步通知。
使用BackgroundWorker - 它無論如何封裝線程和更簡單的工作。其優點之一是它的api允許更簡單的基於事件的模型報告進度,並進一步,這些事件調用被正確路由到UI線程(這樣你就不必使用Invoke方法編組調用)。
儘管BackgroundWorker
class不是從Thread
類派生而來,但它使您能夠管理線程比自己創建和調用線程更容易的工作。
它提出了三個重要事件:
DoWork
- 提出的線程啓動時。ProgressChanged
- 向主UI線程報告進度。RunWorkerCompleted
- 線程完成時引發。
通過這些,您可以在調用RunWorkerAsync()
啓動它之後監視線程正在執行的工作。
BackgroundWorker封裝線程?你在說什麼 - 有封裝委託,它是異步調用的。 – 2011-01-21 09:45:32
我覺得有一個很大的不同,那就是當你想在BackgroundWorker調用的方法中使用任何UI組件時,它根本不起作用。我的意思是BackgroundWorker真的是一個後臺進程,你將無法使用界面操作。例如,如果您在由BackgroundWorker調用的方法中創建新標籤,那麼您肯定會遇到錯誤。
- 1. 工作線程和backgroundworker線程之間的區別?
- 2. BackgroundWorker和System.Threading.Thread之間的區別
- 3. thread.start()和executor.submit(線程)之間的區別
- 4. BackgroundWorker和主線程之間的溝通
- 5. 時間多線程和超線程之間有什麼區別?
- 6. SwingUtilities線程和AWT.EventQueue線程之間的區別
- 7. 線程#運行和線程#喚醒之間的區別?
- 8. 線程和線程池之間的區別
- 9. UI線程和其他線程之間的區別
- 10. 線程狀態之間的區別
- 11. 關於GCD和線程類別之間的區別的疑問
- 12. Android中進程,活動,線程和任務之間的區別
- 13. 線程的mmap中的MAP_PRIVATE和MAP_SHARED之間的區別
- 14. 之間的〜/和的區別../
- 15. 什麼是Asynctask和android中的線程之間的區別?
- 16. 函數和過程之間的區別?
- 17. C和JAVA程序之間的區別
- 18. 用戶級線程和協程之間有什麼區別?
- 19. '#','%'和'$'之間的區別
- 20. {!!之間的區別!!}和{{}}
- 21. '+ ='和'= +'之間的區別?
- 22. 「。+」和「。+?」之間的區別
- 23. .eq之間的區別。和==
- 24. #。/和#之間的區別。 ./
- 25. !=和!之間的區別==
- 26. 「%〜dp0」和「。\」之間的區別?
- 27. | =和^ = css之間的區別
- 28. 之間的區別。和#
- 29. ==和case之間的區別?
- 30. 「**/* /」和「** /」之間的區別?
+1用於提及ThreadPool – spender 2011-01-21 09:34:17