奇怪的C#Pinvoke SetWinEventHook bug

时间:2014-06-09 01:13:04

标签: c# visual-studio winapi com pinvoke

当使用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)处的断点将触发。

我多次测试过,这种行为每次都是一样的。

1 个答案:

答案 0 :(得分:3)

触发断点切换到Visual Studio,后者获取焦点,发送自己的一组Windows事件。除非您远程调试(单独的计算机或VM),否则在调试WinEvents时会有各种奇怪的行为。