奇怪的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)的断点将触发。

我测试了多次,这个行为每次都是相同的

奇怪的c# Pinvoke SetWinEventHook错误

触发断点切换到Visual Studio,它获取焦点,发送它自己的一组windows事件。除非您在远程调试(无论是单独的机器还是虚拟机),否则在调试WinEvents时将会有各种奇怪的行为。