我有一个WPF客户端应用程序,在任何时间点最多可以有一个实例,如果用户运行第二个实例,它应该将输入参数传递给第一个应用程序实例并退出。 即我使用参数" hello"运行第一个实例,并再次使用新参数#34开始相同appln的新实例;欢迎",noe第二个实例应传递数据" welcome& #34;到第一个实例并退出。
其他WCF和.Net远程处理,有没有最简单,最干净的方法呢?
目前,我可以使用WindowsEventHandle将第一个实例设置为活动状态,但无法传递数据。这是在同一台登录中的同一台机器
答案 0 :(得分:0)
非常基本,但您可以简单地写入文件并让其他应用程序实例监视文件,以获取具有基于当前时间戳到毫秒的消息的唯一ID的新命令。
答案 1 :(得分:0)
当然可以。我们尝试了多种方法,但使用互斥锁的方法看起来效果最好。
这里有一些样本: How can I check for a running process per user session?
关于mutex`es http://odetocode.com/blogs/scott/archive/2004/08/20/the-misunderstood-mutex.aspx
的好文章一个简单的实现 https://stackoverflow.com/a/19326/444149
如果您进行更深入的搜索,我确信SO中有一个很好的示例,它显示了互斥事件如何用于触发另一个应用实例中的内容
答案 2 :(得分:0)
查看Memory-Mapped Files自.NET 4以来,它们已经可用,甚至可以与非托管应用程序共享内存。
非持久内存映射文件非持久文件是 与磁盘上的文件无关的内存映射文件。 当最后一个进程使用完文件时,数据就是 丢失,垃圾收集回收文件。这些文件是 适合为进程间通信创建共享内存 (IPC)。