如何查找失败事件处理程序的源

时间:2019-03-28 05:26:53

标签: c# events delegates

我正在使用COM库,该库的职责是连接到服务器并执行一些操作。所以我订阅了以下活动。

 comHA = new COMlib.ComHA();
 comHA.onConnectSucceeded += Handle_OnConnectSucceeded;
 comHA.onConnectFailed += Handle_OnConnectFailed;

我正在遍历所有设备,并尝试按照以下说明进行连接

foreach (ICtrlConnection host in initialHosts)
{
     comHA.connectByNameEx("ssl", "serverexample.com", credentials, null);
} 

这是Handle_OnConnectFailed代码,可在少数设备上触发。

 void Handle_OnConnectFailed(int hr)
    {
        string msg = "Unknown Error";
        try
        {
            msg = prxCmn.MessageForID((uint)hr);
            msg = msg.Replace("\r\n", " ");
            _logger.Error(msg);

        }
        catch (Exception){}            
    }

问题:我只得到错误号hr,但我无法确定哪个设备无法连接!那么如何将设备标识符发送到Handle_OnConnectFailed

我试图检查COM代码,发现这里是委托,它是SDK,我对此没有任何控制。

[ComVisible(false)]
[TypeLibType(16)]
public delegate void _ComGWEvents_onConnectFailedEventHandler(int hr);

1 个答案:

答案 0 :(得分:0)

您在循环中传递标识符(至少要命名,所以我认为这是您所需要的)。所以我建议如下:

  1. 定义private变量,例如private string _controllerNme;

  2. 在循环中,您需要存储尝试连接的控制者的名称:

    foreach (ICtrlConnection host in initialHosts)
    {
      _controllerNme = "serverexample.com";
      comHA.connectByNameEx("ssl", _controllerNme, credentials, null);
    }
    
  3. 现在您可以在事件增强器内部访问_controllerNme,它可以用来显示哪个控制器发生故障,因此只需更改以下行即可:

    string msg = $"{_controllerNme}: Unknown Error";