目标是让一个在系统托盘中运行的应用程序可以接受来自其实际GUI的用户输入(这不是实际问题)或接受命令行参数(实际上可以通过上下文菜单完成)在Windows资源管理器中)。现在,虽然我知道在应用程序启动后命令行参数不是完全可能的,但我需要一种方法通过某种形式的处理程序将数据传递给已经运行的应用程序实例。我想也许可以定义并提出某种事件?
答案 0 :(得分:0)
你could
传递新的命令行取决于你如何处理多个实例,如果进程发现另一个实例正在运行,你可以使用任何IPC方法,如套接字或内存映射文件将信息传递给终止前的现有流程。
答案 1 :(得分:0)
您将同时运行2个程序实例。在它们之间触发正常的C#事件是行不通的。
您需要做的第一件事是检查系统托盘实例是否已在运行。使用Mutex可能是最简单的方法,请参阅此问题以获取详细信息:.NET 4 single application instance
接下来,您需要使用.NET remoting,WCF或其他形式的IPC将您从全新实例获得的任何数据传递给侦听实例。你会发现很多关于使用WCF在机器之间进行通话的讨论 - 不要让你感到困惑,或者让你觉得WCF太重了 - 使用命名管道甚至是在localhost上监听的TCP端口都可以正常工作你在做。您也可以完全跳过互斥锁,并使用您决定的任何远程解决方案来检查是否已有一个实例正在运行。
此外,不要忘记处理用户从上下文菜单启动应用程序的情况,但系统托盘实例尚未运行(例如,重新启动后)。