我第一次使用BackgroundWorker,並沒有完全清楚。我可以直接從DoWork處理程序發送事件,還是必須調用ReportEvents並從ProgressChanged處理程序發送事件?我可以直接從BackgroundWorker的DoWork處理程序觸發事件嗎?
1
A
回答
1
雖然在技術上可以提高活動,並與來自DoWork
中的用戶界面的工作,你就必須從其他線程中(通過使用Invoke()
或BeginInvoke()
的UI交互,或進行適當的線程同步這樣做,就像你其他跨線程操作),這將會破壞BackgroundWorker
的目的。
更好的選擇是調用ReportProgress()
,然後以線程安全的方式引發ProgressChanged
事件。您通過表示完成百分比的int
(儘管取決於您實際做了些什麼),並且還可以選擇任何object
來獲取有關事件或進度的具體信息。從ProgressChanged內您可以與UI交互,引發事件等。
-1
只需將其添加到代碼中。
void new control.CheckForIllegelCrossPathThreads == false;
相關問題
- 1. BackgroundWorker事件處理程序
- 2. 我可以使用C#處理程序處理HTML5事件嗎?
- 3. 如何處理從BackgroundWorker的DoWork處理程序拋出的異常?
- 4. 我可以從javascript調用LoginStatus.LoggingOut事件處理程序嗎?
- 5. 事件處理程序應該直接響應事件嗎?
- 6. 閉包和BackgroundWorker事件處理程序
- 7. 事件處理程序觸發System.StackOverflowException
- 8. Javascript事件處理程序未觸發
- 9. Sharepoint事件處理程序未觸發
- 10. iOS視圖可以同時處理手勢和直接觸摸事件嗎?
- 11. 除了像onclick這樣的委託處理程序事件外,Jquery直接事件不會觸發嗎?
- 12. 如何從backgroundworker dowork事件報告到listView以及toolStripStatusLabel?
- 13. 我可以使用服務來處理觸摸事件嗎?
- 14. 在BackgroundWorker doWork事件中使用Console.WriteLine
- 15. DoWork中的順序過程BackgroundWorker
- 16. jQuery可以從我的事件處理程序中拋出一個錯誤嗎?
- 17. BackgroundWorker事件未觸發
- 18. 事件處理程序自動點擊事件觸發 - jQuery的
- 19. DispatchReadSource事件處理程序不會觸發綁定套接字
- 20. 我可以以編程方式調用事件處理程序嗎?
- 21. 以角度傳遞事件觸發處理程序
- 22. 我可以防止從ToolTipOpening事件處理程序中顯示WPF ToolTip嗎?
- 23. 從BackgroundWorker DoWork傳遞值到BackgroundWorker完成
- 24. 我可以使用Editbox的OnChange事件來處理線程嗎?
- 25. jQuery:如何停止從blur()處理程序觸發change()事件?
- 26. 第二個事件處理程序不會從按鈕觸發
- 27. MPRemoteCommandCenter事件處理程序從未觸發
- 28. 從按鈕href觸發事件處理程序
- 29. 我可以依靠按註冊順序調用的事件處理程序嗎?
- 30. 我可以直接通過藍牙發送arduino程序嗎?
通常,您不應該從任何其他線程與UI線程交談。你會得到很難調試的副作用。只是不要這樣做。正如亞當所說,更好的選擇是調用ReportProgress。 – Tony 2009-04-30 02:00:18