将参数传递给先前启动的程序实例

本文关键字:程序 实例 启动 参数传递 | 更新日期: 2023-09-27 18:11:15

我需要编写程序,将给出一些路径作为参数,并播放音频文件,位于该路径。但是在我第二次调用这个程序之后,我需要第一个程序来完成播放文件,然后播放第二个文件,这被作为参数传递给第二个实例。如果可能的话,如何将第二个参数作为队列传递到第一个程序实例?

将参数传递给先前启动的程序实例

我猜你是在描述以下策略:-

  1. 你的应用程序的实例A是打开的,并播放轨道x。
  2. 用户双击资源管理器中的轨道Y
  3. windows启动应用程序的实例B,传入文件名作为参数
  4. 实例B检测到实例A
  5. 实例B发送消息给实例a播放音轨Y
  6. 实例B关闭
  7. 实例A收到消息,停止播放音轨X,开始播放音轨Y

显然这就是VLC媒体播放器的工作方式。如果您尝试上述操作,在当前实例开始播放新曲目之前,您将看到一个新的VLC进程出现很短的时间。

这种非常简单的跨进程通信可以使用System.Threading.Mutex之类的东西来实现。例如,你可以使用一个互斥锁来指示当前运行实例的存在,另一个用于将新的轨道名称传递给当前实例。

实际上,这篇文章描述了一些非常相似的东西

我认为您不需要用于此目的的第二个程序实例。您可以简单地要求第一个程序播放完第一个音频文件后播放新的音频文件。您可以通过几种方式实现此目的。

  • 你可以在你的程序中托管一个播放音频文件的WCF服务。它将播放音频并同时收听WCF服务。发送第二个参数的程序将通过WCF服务传递新路径。

  • 同样,您可以使用套接字进行通信

  • 第三种方法是使用Windows消息队列。音频播放器将为新路径连续池化队列。第二个程序将通过在Windows消息队列

  • 中添加消息来发送新的文件路径。
  • 您也可以使用文件进行通信。音频播放器可以查找文件中的更改,其他程序可以写入该文件的路径