【发布时间】:2016-12-09 19:48:34
【问题描述】:
当我尝试在鼠标事件处理程序中获取所有正在运行的进程时,它会引发异常。首先我认为问题仍然存在,因为我在鼠标事件处理程序之前放置了async 关键字,但事实并非如此,因为非异步方法也会引发异常。
我正在使用MouseKeyHook 库。
异常信息:
附加信息:转换为 COM 上下文 0x1ac936a0 此 RuntimeCallableWrapper 失败并出现以下错误:一个 无法进行拨出电话,因为应用程序正在调度 输入同步调用。 (来自 HRESULT 的异常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))。
我从中获取所有进程的事件处理程序:
private async void MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
List<ProcessInfo> allRunningProcesses = Logic.GetAllProcesses();
// ...
}
使用ManagementObjectSearcher获取所有进程:
public static List<ProcessInfo> GetAllProcesses()
{
using (var searcher = new ManagementObjectSearcher(wmiQueryString))
using (var results = searcher.Get()) // EXCEPTION THROWN!
{
// ...
}
}
如您所见,调用searcher.Get() 时会引发异常。 注意: 如果在鼠标事件处理程序 (MouseUp) 之外使用此方法,则不会出现任何问题。
【问题讨论】:
标签: c# com wmi pinvoke mousekeyhook