c# - 如何找到失败事件处理程序的来源
问题描述
我正在使用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);
解决方案
您在循环中传递标识符(至少名称,所以我认为这是您需要的)。所以我建议如下:
定义
private
变量,比如private string _controllerNme;
在您的循环中,您需要存储您尝试连接的控制器名称:
foreach (ICtrlConnection host in initialHosts) { _controllerNme = "serverexample.com"; comHA.connectByNameEx("ssl", _controllerNme, credentials, null); }
在您的事件 hadnler 现在您可以访问
_controllerNme
,它可以用来显示哪个控制器失败了,所以只需更改以下行:string msg = $"{_controllerNme}: Unknown Error";