在WPF / C# 中使用全域鍵盤鉤子(WH_KEYBOARD_LL):對回呼消失進行故障排除
在提供的程式碼中,建立了全域鍵盤鉤子使用SetHook方法。但是,存在一個潛在的問題,即在 SetHook 呼叫中內聯定義的鉤子委託未正確引用並且可能被垃圾收集。這會導致回呼函數失敗,並且不會再接收任何鍵盤事件。
解決方案:
要解決此問題,需要明確建立回調委託並在應用程式中保留對其的參考。這可以透過在SetHook 方法外部聲明委託變數並將其作為參數傳遞來完成:
public class App : Application { private KeyboardListener KListener; private LowLevelKeyboardProc hookCallback; private void Application_Startup(object sender, StartupEventArgs e) { hookCallback = HookCallback; KListener = new KeyboardListener(hookCallback); KListener.KeyDown += new RawKeyEventHandler(KListener_KeyDown); } private void Application_Exit(object sender, ExitEventArgs e) { KListener.Dispose(); } }
在此更新的程式碼中:
透過維護對委託的引用,回呼函數將保留在範圍內並將繼續按預期接收鍵盤事件,解決了鉤子在一段時間後停止工作的問題。
以上是為什麼我的 WPF 全域鍵盤掛鉤停止運作,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!