2012-09-26 85 views
2

我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码工作正常。如果devDrv是由MyObject.Connect之一创建的(请参阅下面的第二个对象),第一次调用MyObject.Connect()可以正常工作。在第二次调用时,我会得到这个错误:“已经从其底层RCW分离的COM对象不能使用”。这似乎是devDrv不持久。我希望这个devDrv对象由MyObject.Connect创建,如下面的第二个对象所示。我会感谢你的帮助。静态C#对象原因:已从其基础RCW分离的COM对象不能使用

// 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(); 
    } 
} 
+1

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

回答

1

我会创造的static constructor代替这种方式

public class MyObject 
{ 
    static ExtDeviceDriver devDrv; 

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

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

但似乎这个问题是从ExtDeviceDriver,而不是你的代码,可能是你不能连接两次

相关问题