2009-01-26 97 views
8

我有做一些冗長同步到FTP服務器,一個控制檯應用程序。
另一個控制檯應用程序準備一個本地文件系統與一些需要更新的文件。
然後第二個將等待第一個,使其成爲在網絡上可見的交換最終的目錄名前完成。從一個運行控制檯應用程序發送信息到另一個

我搜索,使同步應用到它的完成它的工作的第二個應用程序溝通的最佳方式。它看起來像Using Data Copy for IPC是最適合的解決方案。

的問題有兩個方面:

  • 我說得對不對?有沒有更直接的方法來達到相同的結果?
  • 是否有一個託管(.net)的方式來做到這一點?對於IPC

回答

10

如果你需要的是通知對方已經完成了它的任務,一個應用程序,最簡單的方法是使用一個命名的EventWaitHandle。該對象在其無信號狀態下創建。第一個應用在手柄上等待,第二個應用在完成任務時發出信號。例如:

// First application 
EventWaitHandle waitForSignal = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the first application does whatever initialization it can. 
// Then it waits for the handle to be signaled: 
// The program will block until somebody signals the handle. 
waitForSignal.WaitOne(); 

設置第一個等待同步的程序。第二個應用程序也同樣簡單:

// Second app 
EventWaitHandle doneWithInit = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the second application initializes what it needs to. 
// When it's done, it signals the wait handle: 
doneWithInit.Set(); 

當第二個應用程序調用集合,它標誌着事件和第一個應用程序將繼續進行。

+0

這聽起來很好。將立即測試,並返回這裏:) – 2009-01-27 08:13:25

5

其他受歡迎的選項包括:

  • 命名管道
  • 遠程處理(.NET)
  • WCF

如果你只需要同步,你可以考慮Semaphore ,或Mutex對象。 .NET的System.Threading命名空間中存在的類如果您創建這些命名的版本,則它們將應用於整個機器。

+0

我不知道你說的話一半,但會做一些研究,:); 1UP給我的關鍵字:) – 2009-01-27 08:14:21