BHO – прикрепить обработчик событий из рабочего потока

StackOverflow https://stackoverflow.com/questions/685116

  •  22-08-2019
  •  | 
  •  

Вопрос

в DISPID_DOCUMENTCOMPLETE, если я подключаю обработчик onclick для определенного элемента в DOM из рабочего потока, то событие не запускается при нажатии на него, в чем может быть причина?это работает нормально, если я подключаю обработчик событий из основного потока, но я хочу делать все асинхронно.

Я использую CoMarshalInterThreadInterfaceInStream и CoGetInterfaceAndReleaseStream для передачи указателя IID_IWebBrowser2 между потоками.

Это было полезно?

Решение

Что делает ваш рабочий поток и какова потоковая модель обработчика событий?Если моделью потоков является STA, то рабочему потоку необходимо либо периодически перекачивать сообщения, либо, если он ожидает синхронизации, ему следует использовать метод CoWaitFor... функции, чтобы убедиться, что COM-сообщения будут обработаны.Или вы можете агрегировать бесплатный многопоточный маршаллер, но убедитесь, что ваш объект является потокобезопасным и не вызывает какие-либо другие COM-интерфейсы, которые могут выдать вам ошибку модели потоков, если вы это сделаете.

Вероятно, элемент управления веб-браузера несовместим с MTA, поэтому разместить его в нем не получится.В любом случае MTA несовместим с потоком пользовательского интерфейса, поэтому это исключается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top