BHO - Event-Handler von Worker-Thread anhängen
-
22-08-2019 - |
Frage
auf DISPID_DOCUMENTCOMPLETE, wenn ich einen Onclick-Handler für ein bestimmtes Element im DOM von einem Worker-Thread bin Befestigung, dann wird das Ereignis nicht gefeuert zu werden, während es zu klicken, was der Grund sein könnte? Dies funktioniert gut, wenn ich Event-Handler aus dem Haupt-Thread bin Befestigung, aber ich will die Dinge asynchron tun.
I CoMarshalInterThreadInterfaceInStream und CoGetInterfaceAndReleaseStream bin mit IID_IWebBrowser2 Zeiger zwischen Threads zu übergeben.
Lösung
Was ist Ihr Arbeitsthread zu tun, und was ist das Threading-Modell der Ereignishandler? Wenn das Threading-Modell STA ist, dann muss der Worker-Thread, um entweder in regelmäßigen Abständen Nachrichten pumpen, oder wenn es für die Synchronisation wartet dann soll es die CoWaitFor...
Funktionen verwenden, um sicherzustellen, dass COM-Nachrichten verarbeitet werden. Alternativ können Sie das freie Gewinde Einweiser aggregieren, aber stellen Sie sicher, dass Ihr Objekt Thread sicher ist, und ruft nicht zu anderen COM-Schnittstellen, die Sie ein Threading-Modellfehler geben könnte, wenn Sie dies tun.
Wahrscheinlich ist die Web-Browser-Steuerung nicht mit der MTA-kompatibel, so dass Sie es nicht an diesem Ort sein können. In jedem Fall ist der MTA mit einer Benutzeroberfläche Thread nicht kompatibel, so dass die Regeln aus.