恳求帮忙解决remoting开发中遇到的一个难题
在remoting开发中,客户端订阅了服务端的事件,但在客户端退出时没有取消事件订阅,如果服务器端触发事件的时候找不到事件订阅者,就会产生错误。 
 在网上有一个普遍的解决方法,就是遍历委托链,找到异常的对象,从委托链中卸下。比如如下代码: 
                                     if   (MyEvent!=null)    
                                     {    
                                                 foreach(Delegate   d   in   MyEvent.GetInvocationList()) 
                                                 { 
                                                             try 
                                                             { 
                                                                         ((MyEventHandler)d)(this,e);    
                                                             } 
                                                             catch 
                                                             { 
                                                                         MyEvent-=(MyEventHandler)d; 
                                                             } 
                                                 } 
                                     }    
 当然,这样做能达到程序不出错。但是还有一个缺陷(就是难题的所在),当遇到执行   ((MyEventHandler)d)(this,e)语句   ,产生异常然后执行catch语句释放委托。问题就在于try   与   catch之间有时间差(约2秒),换句话说就是客户端会滞后约2秒,如果有多个客户端出现这种情况,滞后时间就更长。在实际应用中,10个客户端,服务器很繁忙时,最长出现过2份钟的滞后。 
 可能你会说,只要客户端退出时显式地释放连接就无问题了,当然,程序会做到这一点,但有些时候会有意外,例如客户端突然断电(服务器有ups),重新启动客户端时就要一个一个地catch.....那时客户端会滞后一段时间,客户就有很大意见。   
 我想请教大家: 
 (1)有什么办法能使try一出错就马上执行catch语句? 
 (2)有没有更主动的方法,判断委托是否已经失效: 
                                                 foreach(Delegate   d   in   MyEvent.GetInvocationList()) 
                                                 { 
                                                             try 
                                                             {    
                                                                         if(委托已经失效)