阻塞放入一个不工作的线程

本文关键字:一个 工作 线程 | 更新日期: 2023-09-27 18:13:03

[System.Runtime.InteropServices.DllImportAttribute("User32.dll", EntryPoint = "BlockInput")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);

如果我在主线程中运行block input,那么它的执行没有问题。如果我把它放在一个线程中,然后执行它,那么它会返回true,但不会阻塞输入。更有趣的是,如果我从线程内部调试代码(而不是从开始)也是有效的。

知道为什么吗?难道每个线程都不应该拥有主线程的特权吗?我是在管理员权限下运行的

阻塞放入一个不工作的线程

尝试将manifest文件添加到您的项目中,并使用管理员权限运行您的应用程序。将这一行复制到manifest文件中。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

然后尝试再次运行,您的BlockInput必须正确运行。

我想这应该行得通:

BeginInvoke((MethodInvoker)delegate{ BlockInput(true); });