我看過其他人有類似的問題,但不是我正在尋找的。在backgrounderworker類的dowork事件中,我創建了一個新類的實例並調用它的一個函數。以前,我在windows.form.timer tick事件中使用了這段代碼,並且將一個委託作爲參數之一傳入,以允許在類中調用的函數和其他函數調用窗體上的方法來更新數據網格在GUI上。在道路事件中有沒有辦法做到這一點?我需要這個,因爲我從dowork調用的函數會調用其他函數,我希望每個函數都可以在GUI數據網格中記錄信息。是否有可能從後臺工作人員dowork事件更新UI
回答
除了在Hans的回答中提到的ReportProgess
之外,您還可以在UI元素之一上使用Control.Invoke來在UI線程中執行代碼。
BackgroundWorker.ReportProgress()方法打算做到這一點。您實現ProgressChanged事件來更新UI,它將在主線程上運行。您不僅僅限於報告進度百分比,還可以傳遞任何對象以通過使用接受userState參數的超載將信息傳遞給事件處理程序。請注意,如果你這樣做,你必須使用適當的鎖定。
不要忘記在後臺工作者本身上將'WorkerReportsProgress'屬性設置爲'true'。 – 2010-09-22 20:38:59
這是我使用ReportProgress時遇到的問題。在DoWork中,我打電話給一個功能。該函數調用其他函數。我希望所有這些功能都能夠向UI發送狀態更新。 – daustin 2010-09-23 12:29:56
因此,編寫一個調用ReportProgress的函數,以便所有這些其他函數都可以調用它。如果必須通過代表。小心,線編組非常昂貴。每秒調用超過1000次,UI線程無法跟上時就死掉了。 – 2010-09-23 12:55:04
您可以將進度數據發送回UI線程,您將在UI線程上獲得該事件,然後您可以更新屏幕。它是非常喜歡您發送回UI線程的對象是不可變的。除了撥打ReportProgress
並處理活動外,您還需要將WorkerSupportsProgress
屬性設置爲true來選擇加入。
- 1. 從後臺工作人員更新UI
- 2. 從後臺工作人員或事件更新GUI
- 3. 在後臺工作人員中,Dowork()究竟是幹什麼的?
- 4. 是否有可能爲後臺工作人員提供一種通用方法?
- 5. 基於結果的後臺工作人員重新運行DoWork嗎?
- 6. 爲什麼沒有後臺工作人員不及時更新UI?
- 7. VB.Net - 從後臺工作人員更新進度欄
- 8. 重新啓動後臺工作人員
- 9. C# - 後臺工作人員?
- 10. 後臺工作人員
- 11. C#,後臺工作人員
- 12. C#後臺工作人員
- 13. 感謝推送事件,是否可以更新服務人員?
- 14. 在後臺工作時更新UI
- 15. 後臺工作人員和圖表更新
- 16. 後臺工作人員更新進度凍結datagridview
- 17. 在後臺工作人員中更新文本框
- 18. WPF MVVM更新後臺工作人員的視圖模型
- 19. 用MVVM中的後臺工作人員更新ObservableCollection
- 20. C#後臺工作人員用戶界面更新
- 21. 使用後臺工作人員的方式是否正確
- 22. 我是否需要實現後臺工作人員
- 23. 從一個單獨的後臺工作人員更改表格
- 24. 後臺工作人員不能正常工作
- 25. 從後臺線程更新UI控件
- 26. 是否有可能讓Jenkins更快地創建附加雲的工作人員?
- 27. asp.net中的後臺工作人員
- 28. 後臺工作人員worker_spi示例PostgreSQL
- 29. 後臺工作人員取消
- 30. 取消後臺工作人員
但是在DoWork中,我可以將此能力(作爲委託參數)傳遞給DoWork中的一個類instanstiate嗎? – daustin 2010-09-23 12:36:26
@ user94593:好的。 – Heinzi 2010-09-23 13:20:12
你碰巧有代碼示例嗎? – daustin 2010-09-27 20:54:44