Was kann dazu führen, dass Windows einen (globalen) Low-Level-Tastatur-Hook löst?

Wir haben einige globale Tastatur-Hooks über @ installierSetWindowsHookEx mitWH_KEYBOARD_LL die zufällig von Windows ausgehakt zu werden scheinen.

Wir haben überprüft, dass der Hook nicht mehr angehängt ist, weil @ angerufen wurdUnhookWindowsHookEx am Griff gibt @ zurüfalse. (Auch überprüft, dass es @ zurückgitrue wenn es richtig funktioniert hat)

Es scheint keinen konsistenten Repro zu geben. Ich habe gehört, dass sie sich aufgrund von Zeitüberschreitungen oder Ausnahmen lösen können, aber ich habe beide versucht, es für mehr als eine Minute auf einem Haltepunkt in der Handhabungsmethode zu lassen , sowie nur eine zufällige Ausnahme (C #) auslösen und es scheint immer noch zu funktionieren.

In unserem Rückruf posten wir schnell in einem anderen Thread, so dass das wahrscheinlich nicht das Problem ist. Ich habe über Lösungen in Windows 7 gelesen, um das Timeout in der Registrierung zu erhöhen, da Windows 7 anscheinend aggressiver in Bezug auf das Timeout ist (wir führen hier alle Win7 aus, sind uns also nicht sicher, ob dies auf anderen Betriebssystemen auftritt), aber das tut es nicht scheint keine ideale Lösung zu sein.

Ich habe darüber nachgedacht, ab und zu nur einen Hintergrund-Thread laufen zu lassen, um den Hook zu aktualisieren, was hackisch ist, aber ich kenne keine wirklichen negativen Konsequenzen, und es scheint besser zu sein, als eine globale Windows-Registrierung zu ändern Rahmen

Irgendwelche anderen Vorschläge oder Lösungen?Beide Klasse, die die Hooks festlegt, und die Delegaten, an die sie angehängt sind, sind statisch, daher sollten sie keine GC erhalten.

EDIT: Bestätigt mit Aufrufen vonGC.Collect(); Dass sie immer noch funktionieren, damit sie nicht überflüssig werden.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage