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

时间:2009-12-23 11:23:28

标签: c#

像这样

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

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

9 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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)使用文件系统&amp;收听文件更改通知 [努力:简单]

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

如果你要使用.Net 4.0,你可以使用Memory Mapped Files

答案 4 :(得分:0)

如何使用SQL Server Compact Edition?

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我认为这是Message Queue

的完美候选人

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

此页面提供了如何实施队列的一个很好的示例:Use Microsoft Message Queuing in C# for inter-process communication

MSDN在此提供示例服务:C#: A Message Queuing Service Application

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

就我而言,我有2个申请

  1. 基于WCF服务的应用程序
  2. Windows应用程序
  3. 我曾使用 Message Queue 来克服此数据共享问题

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

    使用方法:

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