在 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中文网其他相关文章!