这段程序是低级鼠标钩子(WH_MOUSE_LL)的子程程序片段。
问题描述:
如下代码所示:Thread.Sleep(250);return 1;可以阻止消息传递到windows。
而Thread.Sleep(500);return 1;不能阻止消息传递到windows。
我的问题是Thread.Sleep(500)为何不能阻止消息传递,又如何去阻止它去传递呢?
protected override int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam)
{
省略代码...
...
if (nCode > -1 && (MouseDown != null || MouseUp != null || MouseMove != null))
{
if (MouseDown != null)
{
//Thread.Sleep(250); //(250ms代表处理一段逻辑)
//return 1;
Thread.Sleep(500); //(500ms代表处理一段逻辑)
return 1;
//return CallNextHookEx(_handleToHook, nCode, wParam, lParam);
}
}
return CallNextHookEx(_handleToHook, nCode, wParam, lParam);
}
没用过钩子,不过你这是啥意思。不让点击?
点击后的295ms中用户鼠标消息无效?
我改了下问题描述您可以再看看
@pecool: 我大概明白了,为了防止鼠标down事件程序处理时间过程过长...正常的做不是应该把这部分处理逻辑做成异步的或者放在一个线程里执行吗?
..你把问题描述修改了但是原始问题被你改没了啊,都不知道是啥问题了,
我记得你的逻辑跟你描述的好像不一样,
@猝不及防: 好吧,你在看问题描述,我把源代码放上了。
@猝不及防: 我现在做的这个不允许使用异步,必须在当前线程内,阻断down的继续传递
帮忙看看吧,真的卡住了。
– pecool 4年前