2012-09-17 25 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

我会在事件参数使用一个事件与布尔标志。这个布尔标志可以由消费者设置并作为您的中止信号。