Как найти источник Failed Event Handler - PullRequest
0 голосов
/ 28 марта 2019

Я использую библиотеку 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 голосов
/ 28 марта 2019

Вы передаете идентификатор в вашем цикле (по крайней мере, имена, поэтому я думаю, что это то, что вам нужно).Поэтому я бы предложил следующее:

  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";
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...