奇怪的c# Pinvoke SetWinEventHook错误
本文关键字:SetWinEventHook 错误 Pinvoke | 更新日期: 2023-09-27 18:07:54
当使用Pinvoke调用SetWinEventHook API时,我目前遇到了一个非常奇怪的错误。
我使用SetWinEventHook(通过Pinvoke)来挂钩窗口创建事件,以便每次创建新窗口时我的c#函数都会被调用。下面是钩函数的代码:
lock(_lock)
{
// check if the window handler is valid
isValidWindow = check();
if (isValidWindow) //L1
{
//do something if the window handler is valid
doSomething() //L2
}
}
由于某些原因,当我在visual studio中调试这段代码时,如果我在L2中设置了一个断点,并继续打开一个新窗口,那么L2中的断点永远不会被触发。
但是,如果我在L1和L2设置断点,然后继续打开一个新窗口,那么L2(和L1)的断点将触发。
我测试了多次,这个行为每次都是相同的
触发断点切换到Visual Studio,它获取焦点,发送它自己的一组windows事件。除非您在远程调试(无论是单独的机器还是虚拟机),否则在调试WinEvents时将会有各种奇怪的行为。