C#从调试器中排除线程以防止它们被挂起

C#从调试器中排除线程以防止它们被挂起,c#,multithreading,debugging,callback,hook,C#,Multithreading,Debugging,Callback,Hook,我有以下代码: 我用这个做低层鼠标和低层键盘挂钩 当我调试并暂停应用程序时,钩子不会执行。 这会导致输入延迟至少10秒 我还使用CreateThread而不是托管线程(也使用HideFromDebugger标志)对其进行了测试 可悲的是,这无济于事 似乎c#调试器冻结了任何执行托管代码的线程 我想知道是否有办法排除我的钩子线程,以防止它们被挂起 注意:我搜索了这个问题,但没有找到提供自动解决方案的答案。我希望找到一种方法,通过Thread.Name.Contains(“Foo”)或将调试器设置

我有以下代码:

我用这个做低层鼠标和低层键盘挂钩

当我调试并暂停应用程序时,钩子不会执行。
这会导致输入延迟至少10秒

我还使用CreateThread而不是托管线程(也使用HideFromDebugger标志)对其进行了测试
可悲的是,这无济于事

似乎c#调试器冻结了任何执行托管代码的线程

我想知道是否有办法排除我的钩子线程,以防止它们被挂起


注意:我搜索了这个问题,但没有找到提供自动解决方案的答案。我希望找到一种方法,通过Thread.Name.Contains(“Foo”)或将调试器设置为从不挂起所有线程来排除它们。

欢迎使用。我查看了Windows钩子类,看起来很标准。当您说调试应用程序并暂停它时,钩子不会执行是因为钩子是在目标应用程序/进程上设置的,当您在Visual Studio进程中调试时,它们不会被调用。如果创建钩子的线程(请参阅,它需要一个消息循环,并且需要处于活动状态)被挂起,然后windows调用该钩子以“超时”结束,这可能导致不再调用该钩子。在调试时,这也是非常烦人的。因为鼠标和键盘将停止工作,直到windows超时