C# 上下文0x3c74b38已断开连接。不会使用代理为COM组件上的请求提供服务。

C# 上下文0x3c74b38已断开连接。不会使用代理为COM组件上的请求提供服务。,c#,sharpdevelop,C#,Sharpdevelop,我正在Microsoft visual C#2008 express edition中开发一个窗口应用程序。运行该应用程序时出现运行时错误 string[] diskArray; string driveNumber; string driveLetter; **searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");** foreach (ManagementObject d

我正在Microsoft visual C#2008 express edition中开发一个窗口应用程序。运行该应用程序时出现运行时错误

string[] diskArray;
string driveNumber;
string driveLetter;

**searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");**
foreach (ManagementObject dm in searcher1.Get()) 
{
    diskArray = null;
    driveLetter = getValueInQuotes(dm["Dependent"].ToString());
    diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');
    driveNumber = diskArray[0].Remove(0, 6).Trim();
    if(driveLetter==this._driveLetter)
    {
        /* This is where we get the drive serial */
        ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

        foreach (ManagementObject disk in disks.Get()) 
        {
            if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB") {
                this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString());
(在突出显示的行中)


上下文0x3c74b38已断开连接。不会使用代理为COM组件上的请求提供服务。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/单元都保持活动状态,直到应用程序完全使用RuntimeCallableWrappers完成,RuntimeCallableWrappers表示位于它们内部的COM组件。

很可能,您可以在内部异常中找到另一个,例如

COMException: The application called an interface that was marshalled for a different thread.
这意味着您必须在另一个线程中调用您的方法。如果查看调用堆栈,可能会找到调用此代码的事件处理程序。只需使用/method调用代码。见下例:

if (this.InvokeRequired) // in some cases this condition will not work
{
    this.BeginInvoke(new MethodInvoker(delegate() { this.Your_Method(); }));
    return;
}
当USB设备断开连接时,我遇到了类似的错误。但在我的例子中,我在LibUsbDotNet事件处理程序中调用的自动生成的WMI wrap类中得到了它