当使用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)处的断点将触发。
我多次测试过,这种行为每次都是一样的。
答案 0 :(得分:3)
触发断点切换到Visual Studio,后者获取焦点,发送自己的一组Windows事件。除非您远程调试(单独的计算机或VM),否则在调试WinEvents时会有各种奇怪的行为。