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

相关问题