Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待事件处理程序完成,然后继续_C#_Asp.net_Events_User Controls - Fatal编程技术网

C# 等待事件处理程序完成,然后继续

C# 等待事件处理程序完成,然后继续,c#,asp.net,events,user-controls,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); 的实例保存在订阅ListPrepared事件并修改所创建列表的页面中。显然,我

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

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

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

事件是同步引发的。这意味着事件的所有订阅者将在调用OperationAndDisplayList方法之前执行其代码。这也意味着,如果任何事件订阅者修改了myList,那么事件发布者也可以看到修改。如果这不是您想要的,您应该在引发事件之前创建列表的副本,并且只发送带有事件参数的副本。

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

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

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

Oh。我认为它们是异步的。好吧,这让这个问题变得很傻。哈哈,我第一次开始使用它们的时候,我还以为它们也是异步的。事件只是一种奇特的委托类型,一种多播委托。。。这意味着您可以有一个代理列表来处理事件,而不仅仅是一个代理。任何代理都是多播代理。它们之间有三个区别:1。只能从创建事件的类调用事件。2.事件仅与+=和-=运算符一起工作,而不与=。3.事件可以是接口成员,而委托不能。事件是同步的,但事件处理程序可以执行异步操作,而不必等待其完成。实际上,.NET团队从委托和多播委托开始,但现在它们是相同的。哦我认为它们是异步的。好吧,这让这个问题变得很傻。哈哈,我第一次开始使用它们的时候,我还以为它们也是异步的。事件只是一种奇特的委托类型,一种多播委托。。。这意味着您可以有一个代理列表来处理事件,而不仅仅是一个代理。任何代理都是多播代理。它们之间有三个区别:1。只能从创建事件的类调用事件。2.事件仅与+=和-=运算符一起工作,而不与=。3.事件可以是接口成员,而委托不能。事件是同步的,但事件处理程序可以执行异步操作,而不必等待其完成。实际上,.NET团队从委托和多播委托开始,但现在它们是相同的。