在应用程序之间共享类属性(字段)

时间:2012-02-13 07:50:48

标签: vb.net class data-sharing

我有一个8位数字输出板用于设备控制。每个外部设备需要一位,并由不同的应用程序控制。 我编写了一个类库和类DigitalOutputPort(VB 2010),它包含管理8位端口的驱动程序。每个设备应用程序都使用此类,创建自己的实例。

为了设置数字输出端口的一位,我必须向该端口写一个字节:该字节是所有8位的位掩码:将位号设置为0 - 1 - 2,I必须在端口上写入7,将所有8位设置为HIGH,我必须写入256,依此类推......

只有一个应用程序使用该类时,一切正常。但是如果两个应用程序想要在该端口上设置自己的位,我会遇到问题,因为我不知道其他应用程序设置的所有位的当前值(驱动程序没有这样的功能),当然,我不能改变一位不改变所有其他(如果我不知道当前位掩码)

通常这看起来像是在两个应用程序之间共享数据的典型情况,我的第一个想法是在光盘上的文件中写入端口的当前值,所有应用程序都可以访问和读取它。但对于这个简单的问题,这似乎太沉重了。此外,它还可能产生性能和可靠性问题。

然后我在课堂上使用共享字段(属性)。共享字段在类的所有实例之间保留其值:但是来自不同应用程序的实例之间是否也是如此?我找不到关于这最后一点的更多信息,我必须做同样的测试。

第三种方式是我只创建DigitalOutputPort类的一个实例,一个用于所有应用程序。 第一个需要它的应用程序,创建对象,所有其他应用程序将使用已经创建的对象。 我比其他人更喜欢这种方式,但我不知道是否以及如何做到这一点。

您认为哪种方法应该是正确的方法?

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

两个不同的应用程序将始终具有不同且独立的内存。因此,即使共享字段也不一样。共享字段仅在特定应用程序及其内存的上下文中共享,而不是在系统上全局共享。

因此您需要在两个应用程序之间共享数据。有几个选项,尽管最简单和最简单的是您提到的选项 - 将其存储在磁盘上的文件中。它不是矫枉过正,因为它是一个非常简单的实现。请记住不要锁定文件,因为有几个进程需要访问它。

您提出的另一种可能性是使用DigitalOutputPort的共享实例。这意味着让第一个应用程序创建实例,并通过WCF / Remoting /其他一些跨进程通信方法公开它,以便其他应用程序可以访问它。这当然是可能的(虽然一旦所有这些应用程序都关闭,DigitalOutputPort的状态就会丢失),但它要复杂得多,特别是如果你还没有使用这些通信框架的话。

我会坚持使用磁盘上的文件或可能是注册表项来在应用程序之间存储共享的持久数据。