BHO - присоединить обработчик событий из рабочего потока - PullRequest
0 голосов
/ 26 марта 2009

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

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

1 Ответ

1 голос
/ 26 марта 2009

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

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

...