我正在使用BackgroundWorker
進行WinForm項目的數據提取過程,並且我需要定期更新顯示活動進度的進度條。BackgroundWorker報告活動進度
我的問題是:有沒有辦法將提取邏輯(在我的情況下在不同的類中實現)從「進度報告」邏輯中分離出來?
我正在使用BackgroundWorker
進行WinForm項目的數據提取過程,並且我需要定期更新顯示活動進度的進度條。BackgroundWorker報告活動進度
我的問題是:有沒有辦法將提取邏輯(在我的情況下在不同的類中實現)從「進度報告」邏輯中分離出來?
您不能從執行工作的邏輯中分離報告進度的邏輯,但可以將報告進度的邏輯與更新進度欄的邏輯分離。
這樣做的一種方式是在類中提供一個事件來完成工作,向感興趣的方報告其進度,並使用執行該工作的邏輯註冊事件處理程序,並隨進程更改而定期調用它。
然後,您的後臺工作人員將通過註冊接收來自「執行工作」邏輯的這些事件通知,並使用從事件接收的數據調用其自己的ReportProgress
成爲「感興趣方」。這樣,「做工作」邏輯可能仍然不知道後臺工作者的ReportProgress
。
是的,這正是我的意思。我對WinForms還沒有那麼有經驗,所以我一直在尋找確認。非常感謝你。 – davioooh 2012-02-16 10:24:05
如果你在*之外*做這項工作的邏輯,你怎麼知道它已經取得了多少進展? – dasblinkenlight 2012-02-16 09:56:55
@dasblinkenlight明確。所以,如果我想在另一個類中實現我的提取邏輯,我想我必須找到一種方法來從我的「提取類」中調用ReportProgress(percentProgress); ...我錯了嗎? – davioooh 2012-02-16 10:00:56
不一定:您的工作邏輯必須決定進度何時更改,但不需要直接調用ReportProgress:您的後臺工作人員可以在工作邏輯報告進度和調用ReportProgress之間插入自己的委託。 ;請參閱下面的答案。 – dasblinkenlight 2012-02-16 10:13:15