【问题标题】:Send message from one running console app to another从一个正在运行的控制台应用程序向另一个应用程序发送消息
【发布时间】:2010-10-03 14:03:21
【问题描述】:

我有一个控制台应用程序正在长时间同步到 ftp 服务器。
另一个控制台应用程序准备一个本地文件系统,其中包含一些需要的更新文件。
然后第二个将等待第一个完成,然后交换最终目录名称,使其在网络上可见。

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

问题有两个:

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

【问题讨论】:

    标签: c# .net ipc


    【解决方案1】:

    如果您只需要通知一个应用程序另一个已完成其任务,最简单的方法是使用命名的 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 时,它会发出事件信号,第一个应用程序将继续。

    【讨论】:

    • 这听起来很好。将立即测试并返回这里:)
    【解决方案2】:

    其他流行的 IPC 选项包括:

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

    如果只需要同步,可以考虑Semaphore,或者Mutex对象。在 .NET 的 System.Threading 命名空间中存在一些类,如果您创建这些类的命名版本,那么它们适用于整个机器。

    【讨论】:

    • 我不知道你说的一半,但会做一些研究:); 1UP 给我关键字 :)
    猜你喜欢
    • 2013-09-15
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多