1

假设我有一个名为 A 的用户控件,它执行以下操作:

Page_Load:
    List<object> myList = PrepareList();
    ListPrepared(this, new AArgs(myList)); // Event that lets subscribers modify the list.
    OperateOnAndDisplayList(myList);

A 的一个实例保存在订阅 ListPrepared 事件并修改创建的列表的页面中。显然,我希望页面的处理程序在我操作并显示列表之前完成,因为它正在修改列表以确保完整性。我将如何实施呢?(或者这是一个可怕的想法,因为它暴露了列表,因此需要外部元素了解列表才能修改它?)

4

2 回答 2

4

事件是同步引发的。这意味着事件的所有订阅者都将在OperateOnAndDisplayList调用方法之前执行他们的代码。这也意味着如果myList被任何事件订阅者修改,则该修改对事件发布者也是可见的。如果这不是您想要的,您应该在引发事件之前创建列表的副本,并且只发送带有事件的EventArgs.

于 2012-08-23T15:27:31.493 回答
3

如果事件处理程序在其所有代码完成后返回,那么您不必担心它。事件只是调用方法的一种方式。它与异步操作没有直接关系。

于 2012-08-23T15:27:44.560 回答