Перехват события от сторонней программы - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Ситуация в следующем... есть программа от стороннего разработчика, в которой API интерфейс реализован так, что есть корневой COM-объект и набор методов для запроса данных, но которые ничего не возвращают. Сами данные передаются в виде аргументов событий объекта, которые нужно перехватывать. С созданием обработчика для перехвата событий и получением данных проблем нет. Проблема в том, что, когда на форме я нажимаю кнопку для получения данных, запускается обработчик события (button_click), в котором я создаю свой объект, запускаю метод на получение данных и в котором прописан обработчик события на получение данных от сторонней программы. НО при этом обработчик события от сторонней программы запускается только после того, как завершит свое действие обработчик button_click. Выводил запрос данных в отдельный поток - не помогло. Поток создавал внутри своего объекта. Можно ли как-нибудь сделать так, чтобы по нажатию кнопки обработка события от сторонней программы производилась до завершения работы button_click ? P.S. Для создания форм использую WPF.

Решение задачи: «Перехват события от сторонней программы»

textual
Листинг программы
                bool proceed=false;
                int timeout=1500; // в миллисекундах
                // создание обработчика события от сторонней программы
                ALIENPROG.OIEvents_OnGetDataEventHandler alienProg_OnGetData = (object sender, 
                                                                                int number) =>
                    { // СЮДА ЗАХОДИТ ТОЛЬКО ПОСЛЕ ТОГО КАК ЗАВЕРШИТСЯ Button_Click() в основном проекте
                        data.Add(number);
                        proceed=true;
                    };
 
                // добавление обработчика события OnGetData для объекта запроса alienProg
                alienProg.OnGetData += alienProg_OnGetData;
StopWatch sw = new Stopwatch();
sw.Start();
while(!proceed&&sw.ElapsedMilliseconds<timeout)
    Thread.Sleep(50);//Ждем по 50 миллисекунд
sw.Reset();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы