Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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#_Silverlight_Event Handling - Fatal编程技术网

C#如何检查事件处理程序是否完成

C#如何检查事件处理程序是否完成,c#,silverlight,event-handling,C#,Silverlight,Event Handling,是否有一种优雅的方式来检查活动是否已经结束?“我唯一的选项”显示为创建另一个事件处理程序,在第一个事件完成时调用该事件处理程序。如果调用链中没有任何多线程环境,只需在第一个事件处理程序的末尾调用事件处理程序function即可: public void HandlingEvent( ...) { //do some stuff RaiseAnotherEventHandler(); } 事件处理程序只是返回类型为VOID的多播委托。在内部,它实现了观察者模式,当事件通知程

是否有一种优雅的方式来检查活动是否已经结束?“我唯一的选项”显示为创建另一个事件处理程序,在第一个事件完成时调用该事件处理程序。

如果调用链中没有任何多线程环境,只需在第一个事件处理程序的末尾调用事件处理程序function即可:

public void HandlingEvent( ...) {

   //do some stuff 


   RaiseAnotherEventHandler();

}

事件处理程序只是返回类型为VOID的多播委托。在内部,它实现了观察者模式,当事件通知程序调用/引发事件时,消息将广播给所有订阅者。原则上,事件通知程序不担心订阅者端发生的情况,但是,如果订阅者端发生了任何异常,并且没有处理,则会将异常重新抛出给通知程序。因此,如果将事件调用/调用代码包含在try/catch块中,并且如果事件调用/调用代码在没有任何异常的情况下执行,则表示所有事件处理程序/订阅服务器都已执行,并且事件执行已完成。

事件处理程序被同步调用,因此“已完成”当代码路径返回到调用方时。@AdamHouldsworth你是什么意思?!我不熟悉c#中的事件处理程序,但这不是事件处理程序的本质,导致事件的调用操作首先完成,触发的操作随后运行(或在单独的线程中)。请陈述一些简单的代码来解释您的问题,TruthOf42@nl-一个简单的演示应用程序将向您证明这一点。我想你可以异步调用它们,但大多数情况下你不能这样做。@AdamHouldsworth:如果我有一个带有填充标签的按钮的表单,然后在(1){}时暂停
。。。我永远不会看到那个标签被填满。因为暂停延迟了填充标签所需的事件(无效等)。这至少可以证明触发的事件是在导致事件完成的块之后运行的。这就是我最终要做的,但我希望有比创建新事件处理程序更简单的方法。哦,好吧