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

时间:2011-10-15 12:07:02

标签: c# .net parameter-passing

我需要编写将作为参数提供一些路径的程序,并播放位于该路径中的audiofile。但是在我第二次调用该程序后 - 我需要第一次完成播放文件并在播放第二个文件之后,将其作为参数传递给第二个实例。如果可能的话,如何将第二个参数作为队列传递给第一个程序实例。?

2 个答案:

答案 0 :(得分:3)

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

  1. 您的应用的实例A已打开并正在播放曲目X。
  2. 用户双击资源管理器中的跟踪Y
  3. windows启动应用程序的实例B,将文件名作为参数传递
  4. 实例B检测到实例A
  5. 实例B向实例A发送消息以播放音轨Y
  6. 实例B关闭
  7. 实例A接收消息,停止播放曲目X并开始播放曲目Y
  8. 显然这是VLC媒体播放器的工作方式。如果您尝试以上操作,您将看到在当前实例开始播放新曲目之前短时间内出现新的VLC过程。

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

    事实上,this article描述的内容非常相似。

答案 1 :(得分:1)

我认为你不需要第二个程序实例。您可以简单地让第一个程序在播放完第一个程序后播放新的音频文件。您可以通过多种方式实现这一目标。

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

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

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

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