从一个正在运行的控制台应用程序发送消息

时间:2009-01-26 16:39:16

标签: c# .net ipc

我有一个控制台应用程序正在与ftp服务器进行一些冗长的同步 另一个控制台应用程序准备一个本地文件系统和一些所需的更新文件 然后第二个将等待第一个完成,然后交换最终目录名称,以便它在网络上可见。

我搜索了使同步应用程序与第二个应用程序进行通信的最佳方法,即它完成了它的工作。看起来Using Data Copy for IPC是最合适的解决方案。

问题有两个:

  • 我是对的吗?是否有更直接的方法来获得相同的结果?
  • 是否有托管(.net)方式来执行此操作?

2 个答案:

答案 0 :(得分: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();

当第二个应用程序调用Set时,它会发出事件信号,第一个应用程序将继续。

答案 1 :(得分:5)

IPC的其他流行选项包括:

  • 命名管道
  • 远程处理(.NET)
  • WCF

如果您只需要同步,则可以考虑使用SemaphoreMutex对象。 .NET的System.Threading命名空间中存在类如果您创建这些类的命名版本,则它们将应用于整个计算机。