2012-02-16 94 views
0

我正在使用BackgroundWorker進行WinForm項目的數據提取過程,並且我需要定期更新顯示活動進度的進度條。BackgroundWorker報告活動進度

我的問題是:有沒有辦法將提取邏輯(在我的情況下在不同的類中實現)從「進度報告」邏輯中分離出來?

+0

如果你在*之外*做這項工作的邏輯,你怎麼知道它已經取得了多少進展? – dasblinkenlight 2012-02-16 09:56:55

+0

@dasblinkenlight明確。所以,如果我想在另一個類中實現我的提取邏輯,我想我必須找到一種方法來從我的「提取類」中調用ReportProgress(percentProgress); ...我錯了嗎? – davioooh 2012-02-16 10:00:56

+0

不一定:您的工作邏輯必須決定進度何時更改,但不需要直接調用ReportProgress:您的後臺工作人員可以在工作邏輯報告進度和調用ReportProgress之間插入自己的委託。 ;請參閱下面的答案。 – dasblinkenlight 2012-02-16 10:13:15

回答

0

您不能從執行工作的邏輯中分離報告進度的邏輯,但可以將報告進度的邏輯與更新進度欄的邏輯分離。

這樣做的一種方式是在類中提供一個事件來完成工作,向感興趣的方報告其進度,並使用執行該工作的邏輯註冊事件處理程序,並隨進程更改而定期調用它。

然後,您的後臺工作人員將通過註冊接收來自「執行工作」邏輯的這些事件通知,並使用從事件接收的數據調用其自己的ReportProgress成爲「感興趣方」。這樣,「做工作」邏輯可能仍然不知道後臺工作者的ReportProgress

+0

是的,這正是我的意思。我對WinForms還沒有那麼有經驗,所以我一直在尋找確認。非常感謝你。 – davioooh 2012-02-16 10:24:05

相關問題