【问题标题】:Pass parameters to previously started program instance将参数传递给先前启动的程序实例
【发布时间】:2011-10-15 12:07:01
【问题描述】:

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

【问题讨论】:

    标签: c# .net parameter-passing


    【解决方案1】:

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

    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 之类的东西来实现。例如。您可以使用一个互斥体来指示当前正在运行的实例的存在,而另一个用于将新轨道名称传递给当前实例。

    事实上,this article 描述的东西非常相似。

    【讨论】:

    • 认为这是我搜索的方式。谢谢,我尝试使用互斥锁!
    • 完成。使用了这种消息传递机制:boycook.wordpress.com/2008/07/29/…。谢谢你的好提示!
    【解决方案2】:

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

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

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

    • 第三种方法是使用 Windows 消息队列。音频播放器将不断为新路径汇集队列。第二个程序将通过在 Windows 消息队列中添加消息来发送新的文件路径

    • 您还可以使用文件进行通信。音频播放器可以查找文件的变化,其他程序可以写入该文件的路径

    【讨论】:

    • 感谢您的回答,但要求始终将路径作为参数发送。关键是另一个程序会在某些事件上调用我的 one+参数。
    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 2020-10-12
    • 2020-07-22
    • 2014-05-24
    • 1970-01-01
    • 2014-09-28
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多