簡體   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