1

我有一个类,它根据在对象状态更改之前引发事件以及在状态更改后引发事件的约定公开可取消事件。发布者(服务器)公开的更改前事件在表单上StateChanging并具有参数 a CancelEventArgs,而更改后事件在表单上StateChanged。这为事件的订阅者(客户端)提供了在操作开始之前取消操作的能力。

现在,我已经更改了其中一项操作,使其成为长时间运行的操作,并且我想让订阅者在操作开始后也可以取消操作(并且还可以了解操作进度)。我想到了基于事件的异步模式

问题是我想保留更改前和更改后事件模式,因为它是发布者在某些时候需要操作,而在异步模式中,在我看来是客户端专门询问某个异步运行的操作。另一种可能性(但对我来说似乎并不优雅)可能是让服务器公开一个事件(例如OperationRequired),使客户端知道需要在服务器端完成什么并相应地调用一个RunOperationAsync()方法。请发表评论并添加您的建议。

4

1 回答 1

0

对于由 UI 控制的操作,通常首选基于事件的异步模式。另一种方法是异步编程模型,通常更适合服务器或库 API。如果您选择实施 EAP,那很好。

看一下BackgroundWorker的实现——它是支持取消等的 EAP 的最佳示例。CancelAsync()它通过标准方法提供取消。

于 2011-10-22T09:32:07.867 回答