zoukankan      html  css  js  c++  java
  • remoting 中事件找不到订阅者时引发异常的解决办法

    1、[oneway]oneway属性:

    当事件不可到达,无法发送时,正常情况 下,会返回一个异常信息。如果加上OneWayAttribute,这个事件的发送就变成单向的了。假如此时发生异常,那么系统会自动抛掉该异常信息。由 于没有异常信息的返回,发送信息方会认为发送信息成功了。程序会正常运行,错误的客户端被忽略,正常的客户端依然可以收到消息;

    2、检查委托链:

    就是在发送信息一方时,检查了委托链。并在委托链的遍历中来捕获异常。当其中一个委托发生异常时,显示提示信息。 然后继续遍历后面的委托,这样既保证了异常信息的提示,又保证了其他订阅者正常接收消息。因此,我对本例的远程对象进行了修改,注释掉[OneWay], 修改了BroadCastInfo()方法:

    //[OneWay]
            public void Send(string info)
            
    {
                
    if (MyEvent != null)
                
    {
                     EventHandler tempEvent 
    = null;

                    
    int index = 1//记录事件订阅者委托的索引,为方便标识,从1开始。
                    foreach (Delegate del in MyEvent.GetInvocationList())
                    
    {
                        
    try
                        
    {
                             tempEvent 
    = (EventHandler)del;
                             tempEvent(info);
                         }

                        
    catch
                        
    {                        
                             MessageBox.Show(
    "事件订阅者" + index.ToString() + "发生错误,系统将取消事件订阅!");
                             MyEvent 
    -= tempEvent;
                         }

                         index
    ++;
                     }
                    
                 }

                
    else
                
    {
                     MessageBox.Show(
    "事件未被订阅或订阅发生错误!");
                 }

             }
  • 相关阅读:
    LA 6891 Money Transfers(最短路)
    Gym
    UVa 1662 Brackets Removal
    Gym 101334F Feel Good
    Gym 101334E Exploring Pyramids(dp+乘法原理)
    POJ 2112 Optimal Milking(二分+最大流)
    POJ 2115 C Looooops(模线性方程)
    UVa 11552 最小的块数(序列划分模型:状态设计)
    UVa 10534 波浪子序列(快速求LIS)
    UVa 10891 Sum游戏
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/1864545.html
Copyright © 2011-2022 走看看