击中断点时鼠标冻结/滞后
Posted
技术标签:
【中文标题】击中断点时鼠标冻结/滞后【英文标题】:Mouse freezing/lagging when hit breakpoint 【发布时间】:2020-09-03 12:46:11 【问题描述】:目标:能够在Windows桌面应用程序上找到被点击的元素的点(X,Y)而不执行点击本身。
无效的解决方案 我已将mousekeyhook Nuget 包添加到我的 .net 核心 WPF 应用程序中,它工作正常(当单击并以正确的位置引发事件时),但每次该程序命中断点(对于下面的特定示例 - 在 M_Events_MouseDown 方法)鼠标开始滞后约 20 秒。
我还发现在 WinForms 应用程序中运行顺畅
MouseKeyHook 实现:
public partial class MainWindow : Window
private IKeyboardMouseEvents m_Events;
public MainWindow()
InitializeComponent();
SubscribeGlobal();
private void SubscribeGlobal()
Unsubscribe();
Subscribe(Hook.GlobalEvents());
private void Subscribe(IKeyboardMouseEvents events)
m_Events = events;
m_Events.MouseDown += M_Events_MouseDown;
private void M_Events_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
Console.WriteLine($"Mouse down :e");
private void Unsubscribe()
if (m_Events == null)
return;
m_Events.MouseDown -= M_Events_MouseDown;
【问题讨论】:
【参考方案1】:这是一个已知问题和设计上的低级挂钩行为。
当您连接到鼠标事件处理链时,您的代码就是许多其他处理器之一。每一段被钩住的代码都有可能抑制或修改进一步的处理。然而,这样做是有时间限制的。如果你设置了断点,windows 调用你的代码,你的代码没有响应,发生超时并重新开始。
有关详细信息,请参阅类似问题。点数越多的第二个答案越好。:Low level mouse hook - mouse freeze on breakpoint
【讨论】:
感谢 George 的回答,您能解释一下为什么在 WinForms 应用程序中它可以顺利运行(没有鼠标滞后/冻结),是否有其他方法可以在单击时捕获鼠标坐标?以上是关于击中断点时鼠标冻结/滞后的主要内容,如果未能解决你的问题,请参考以下文章