繁体   English   中英

在两个应用程序间共享数据

[英]Sharing data between two applications

像这样

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

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

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

WCF将是我的首选方式,我将在此处添加一些解释

1)使用WCF - 托管具有以下功能的WCF服务[努力:中等]

//注意这里使用Publisher -Subscriber模式(每个应用程序都会订阅服务,服务可以由某个端点的所有应用程序托管,即net.pipe:// localhost / NotificationService(因为多个应用程序将尝试托管同样的服务只有一个会成功,这正是我们想要的)

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

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

void Add(object objectToAdd);

//遍历每个订阅应用并发送列表已更改的通知

void Notify();

//返回列表的当前状态

IEnumerable<object> GetYourList();

2)剪贴板的使用 [努力:简单]

3)使用文件系统并监听文件更改通知 [努力:简单]

4)内存映射文件 [努力:简单中等]

也许Remoting会帮助你。 它允许您让其他应用程序通过Internet(或本地网络)访问服务器应用程序中的功能。 因此代码在服务器应用程序上执行。 这是一个例子: http//www.codeproject.com/KB/IP/Net_Remoting.aspx

也许您已经意识到这一点,但声明为static的类型对于单个进程(应用程序)是本地的。 阅读您的示例,您似乎希望在应用程序之间共享和访问静态实例。 不是这种情况。

执行所需操作的标准方法是创建第三个应用程序/进程,该应用程序/进程公开对两个其他应用程序可以添加/删除项目的列表的同步访问。

如果您要使用.Net 4.0,则可以使用内存映射文件

如何使用SQL Server Compact Edition?

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

我认为这是Message Queue的最佳候选者

使用消息队列,您可以在一个应用程序中将ID添加到队列中,然后在另一个应用程序中将其拉出。

此页面提供了如何实现队列的一个很好的示例: 在C#中使用Microsoft消息队列进行进程间通信

MSDN在此提供示例服务: C#:消息队列服务应用程序

在我的情况下,我有2个申请

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

我曾使用Message Queue来克服这个数据共享问题

  • 添加您想要的队列数量。
  • 它是一个阻塞读取,因此您的应用程序不会溢出并占用CPU。
  • 非常可靠,没有数据丢失。
  • 添加标题以及每个数据,以识别它是什么类型的数据。

如何使用 :

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

Message Queue是最好的通信方式。 但是,在使用该服务之前,请检查是否需要启用“Microsoft Message Queue”组件。

此外,我们可以获得实时数据交换,因为它也会创建事件,如果配置为这样做。 和FIFO访问消息的方式将使得能够处理每个消息而不会丢失任何单个消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM