在继续之前等待事件处理程序完成

时间:2012-08-23 15:20:43

标签: c# asp.net events user-controls

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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