【问题标题】:Passing data between multiple instances of same application在同一应用程序的多个实例之间传递数据
【发布时间】:2016-03-09 18:31:19
【问题描述】:

我有一个 WPF 客户端应用程序,它在任何时间点最多可以有一个实例,如果用户运行第二个实例,它应该将输入参数传递给应用程序的第一个实例并退出。 即我使用参数“hello”运行第一个实例,并再次使用新参数“welcome”启动同一个 appln 的新实例,第二个实例应该将数据“welcome”传递给第一个实例并退出。

除了 WCF 和 .Net 远程处理之外,还有什么最简单和干净的方法吗?

目前,我可以使用 WindowsEventHandle 将第一个实例设为活动状态,但无法传递数据。这是在同一个登录的同一台机器上

【问题讨论】:

    标签: c# .net windows wcf remoting


    【解决方案1】:

    看看Memory-Mapped Files 从 .NET 4 开始,它们就已经可用,甚至可以与非托管应用程序共享内存。

    非持久化内存映射文件 非持久化文件是 与磁盘上的文件无关的内存映射文件。 当最后一个进程完成对文件的处理时,数据是 丢失并且文件被垃圾收集回收。这些文件是 适用于为进程间通信创建共享内存 (IPC)。

    【讨论】:

    • 感谢您的回答 Erno de Weerd :) 它解决了我的问题!
    【解决方案2】:

    非常基本,但您可以简单地写入文件并让其他应用程序实例监控文件以查找具有唯一 ID 的新命令,以便根据当前时间戳精确到毫秒。

    【讨论】:

      【解决方案3】:

      当然可以。我们尝试了多种方法,但使用互斥锁的方法似乎效果最好。

      这里有一些示例: How can I check for a running process per user session?

      一篇关于互斥锁的好文章http://odetocode.com/blogs/scott/archive/2004/08/20/the-misunderstood-mutex.aspx

      一个简单的实现 https://stackoverflow.com/a/19326/444149

      如果您进行更深入的搜索,我相信 SO 中有一个很好的示例,它显示了互斥事件如何用于触发另一个应用程序实例中的某些内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 2017-05-12
        相关资源
        最近更新 更多