两个应用程序之间的数据共享

5

like this

public class MyClass { 
  public static instance = new MyClass();
 private List<int> idList; 
}

我在两个不同的窗口应用程序中使用这个类,像这样 MyClass.instance.IdList.Add(1); 我将idList中的所有数据存储在文件中,并从该文件中获取信息。我在一个应用程序中向idList添加值,在另一个应用程序中获取idList信息。但是第二个应用程序没有显示第一个应用程序添加的idList内容。如何实现这一点?


请澄清您的问题 - 很难弄清楚您想要什么。 - Jaco Pretorius
你的意思是你想要一个跨进程的List<int>,还是仅仅是想从两个不同的窗口访问同一个列表? - RichardOD
我想从两个不同的窗口应用程序访问同一个列表。 - jolly
9个回答

6
以下是几种应用之间共享数据的方法:

使用WCF是我首选的方式,我将在这里添加一些解释。

1)使用WCF - 托管一个具有以下功能的WCF服务[难度:中等]

//注意这里使用了发布者-订阅者模式(每个应用程序都会订阅该服务,该服务可以由所有应用程序在某个端点上托管,即 net.pipe://localhost/NotificationService(由于多个应用程序将尝试托管同一个服务,只有一个应用程序能够成功托管,这正是我们想要的)

void Subscribe(object);
void Unsubscribe(object);

//任何想要向列表中添加对象的客户端都将调用Add方法

void Add(object objectToAdd);

// 遍历每个订阅应用程序,并发送通知列表已更改
void Notify();

// 返回列表的当前状态

IEnumerable<object> GetYourList();

2) 使用剪贴板 [难度:简单]

3) 使用文件系统和监听文件变更通知 [难度:简单]

4) 内存映射文件 [难度:简单-中等]


5
也许Remoting可以帮助你。它允许其他应用程序通过互联网(或本地网络)访问你的服务器应用程序中的函数。因此,代码在服务器应用程序上执行。 以下是一个示例:http://www.codeproject.com/KB/IP/Net_Remoting.aspx

4
也许您已经知道了,但是声明为静态的类型仅限于单个进程(应用程序)。从您的示例中可以看出,您希望静态实例在多个应用程序之间共享和访问。然而,事实并非如此。
实现您所需的标准方法是创建第三个应用程序/进程,该应用程序/进程公开对一个列表的同步访问,以便两个其他应用程序可以向其中添加/删除项目。

0

0

为什么不使用XML作为两个应用程序之间的中介。使用XML进行通信。


XML对于ID列表来说有些过于繁琐了。 - Matt Ellen
是的,我已经使用XML文件将数据存储在列表中。然后我在第二个应用程序中对其进行了反序列化。现在运行良好。 - jolly
但是我的消息队列使用经验不太好。有时它会随机从队列中获取数据。 - Pankaj

0

0

消息队列是最好的通信方式。但是请注意,在使用此服务之前,您需要启用“Microsoft Message Queue”组件。

此外,如果配置正确,我们可以实现实时数据交换,并创建事件。而先进先出(FIFO)的消息访问方式将使我们能够处理每个消息,而不会错过任何一个消息。


0

在我的情况下,我有两个应用程序

  1. 基于WCF服务的应用程序
  2. Windows应用程序

我使用消息队列来解决这个数据共享问题

  • 添加任意数量的队列。
  • 它是一个阻塞读取,因此您的应用程序不会超载和占用CPU。
  • 非常可靠,没有数据丢失。
  • 添加头部以及每个数据,以识别它是什么类型的数据。

如何使用:

  • 创建私有队列。
  • 从客户端将数据推入其中。
  • 另一侧读取并解析它。

-1
怎么考虑使用 SQL Server Compact Edition?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接