静态C#对象原因:无法使用已与其底层RCW分离的COM对象

静态C#对象原因:无法使用已与其底层RCW分离的COM对象,c#,exception,com,rcw,C#,Exception,Com,Rcw,我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码运行良好。如果devDrv是由MyObject.Connect中的一个创建的(请参见下面的第二个对象),那么对MyObject.Connect()的第一次调用可以正常工作。在第二次调用中,我将得到以下错误:“无法使用已与其基础RCW分离的COM对象”。似乎devDrv不是持久的。我希望这个devDrv对象由MyObject.Connect创建,如下面第二个对象所示。我会感谢你

我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码运行良好。如果devDrv是由MyObject.Connect中的一个创建的(请参见下面的第二个对象),那么对MyObject.Connect()的第一次调用可以正常工作。在第二次调用中,我将得到以下错误:“无法使用已与其基础RCW分离的COM对象”。似乎devDrv不是持久的。我希望这个devDrv对象由MyObject.Connect创建,如下面第二个对象所示。我会感谢你的帮助

// this code works fine.
public sealed class MyObject
{
    static ExtDeviceDriver devDrv;

    public MyObject()
    {
        devDrv = new ExtDeviceDriver();
    }

    public void Connect()
    {
        devDrv.connect();   
    }
}

//this code causes exception.
public sealed class MyObject
{
    static ExtDeviceDriver devDrv;

    public MyObject()
    {
        // do not create devDrv here.
        //devDrv = new ExtDeviceDriver();
    }

    public void Connect()
    {
        if (devDrv == null)
            devDrv = new ExtDeviceDriver();
        devDrv.connect();   
    }
}

我将创建
静态构造函数
,而不是这样

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

  static MyObject()
  {
    devDrv = new ExtDeviceDriver();
  }

  public void Connect()
  {
    devDrv.connect();   
  }
 }

但问题似乎来自
ExtDeviceDriver
,而不是您的代码,可能是您不允许连接两次

您需要记录如何在代码中使用线程。