2012-09-17 30 views
0

類中有幾個方法執行一些冗長的操作,並應定期向調用者報告進度,例如,顯示錶示層中,登錄文件等從該方法提供進度信息的首選方法?

我用下面,在過去的解決方案,但我很擔心,如果這是首選的方式做到這一點:我已經回調委託定義

這樣的:

public delegate bool ProgressCallback(double percentCompleted, object arg); 

然後,我的「工人」的方法是這樣的:

public bool DoSomething(bool firstArg, int anotherArg, ProgressCallback progressCallback, object callbackArg); 

我調用progressCallback一個漫長的過程的每次迭代之後,如果返回假,這意味着操作應該中止。

請注意,該進程必須是同步的,不需要異步實現。

我只是在我的代碼中反覆重複這種技術,所以我擔心這是否是推薦的模式。這是你如何實現這樣的事情?我應該使用事件嗎,還是這樣簡單的實現對你來說看起來不錯?

回答

1

這是正確的做法!

,不過也許你節省一些時間(和代碼),看看BackgroundWorker

+0

-1:「請注意,進程必須是同步的,不需要異步實現。」 – tomfanning

+0

啊錯過了,謝謝!但是(我明白,如果他想要的話,這是足夠的理由不這樣做),我會建議做異步。看起來更乾淨,你可以更準確地報告進展,並以更好的方式恕我直言。 –

+0

好吧,無論如何,我使用BackgroundWorker,但是它在「上層」中實現,其中封裝了異步功能。這個班級本身並不關心這一點。 –

0

我會在事件參數使用一個事件與布爾標誌。這個布爾標誌可以由消費者設置並作爲您的中止信號。

相關問題