环境:Windows 窗体应用程序、C# .NET 3.5、VS2008
当我从重写的 WndProc 处理程序内部调用以下函数时,我在 mc.GetInstances() 行“COMExcepion 未处理 - 应用程序调用了一个为不同线程编组的接口。(来自 HRESULT 的异常:0x8001010E (RPC_E_WRONG_THREAD ))”
这个更神秘的消息实际上显示在前面提到的异常之前:
“检测到 DiconnectedContext - 上下文 0x3333b40 已断开连接。不会使用代理来为 COM 组件上的请求提供服务。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/公寓保持活动状态,直到应用程序运行完全使用 RuntimeCallableWrapper 完成,它们代表了存在于其中的 COM 组件。”
private bool IsRemovableDevice(char dl)
{
ManagementClass mc = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection partitions = mc.GetInstances();
string bleh = "";
foreach (ManagementObject p in partitions)
{
if (Convert.ToString(p["Caption"])[0] == dl && (int)p["DriveType"] == 2)
return true;
}
return false;
}
这是交易,上面列出的函数在从 WndProc 函数以外的任何上下文调用时都可以正常工作。
我该如何补救?