0

我有一个问题。我有一个视频播放器,它接受简单的参数作为 ac# 表单应用程序。作为一项更好地理解编程的实验,我希望只运行一个应用程序实例,并在给出 open 命令时使用新的 args 刷新它。我可以对其进行编程,以便当它收到信号时,刷新视频()或类似的东西。

伪示例:

//app is started from cmd line

//open app for first time
vidViewer.exe("lotr.avi", "44:44");

//keep instance open but have it refresh with new movie
vidViewer.exe("star_wars.avi", "22:32")

就目前而言,将打开一个带有嵌入式视频播放器的新应用程序,因此如果我传递了足够多的参数,我可以打开 100 个打开的电影。我只想保持一个。

如果需要,可以提供更多信息。

谢谢大家,凯文

4

1 回答 1

1

我的建议是设计您的应用程序,以便在启动时尝试获取互斥的系统资源(这意味着只有第一个实例会成功)。由于在您的场景中,您还需要一种进程间通信方式(传输新视频的名称和开始时间),您可以使用相同的机制来实现这一点。

例如,您可以使用绑定到固定 TCP 端口的自托管 WCF 服务,每个应用程序实例在启动时都会尝试注册该服务。由于端口的工作方式,只有第一个实例会成功;后续实例将因“端口已在使用”异常而失败。

  • 如果一个实例设法注册了 WCF 服务,那么您可以假设它是“主体”实例并继续在其上播放视频。但是,它应该侦听来自 WCF 服务的传入消息并相应地更新正在播放的视频(见下文)。

  • 如果一个实例发现该端口已经在使用,它应该假定另一个实例已经在运行。然后它将初始化一个 WCF 客户端,该客户端将要播放的新视频的名称和开始时间发送到 WCF 服务。最后,它应该在不显示任何窗口的情况下自行终止,假设主体实例将负责播放其视频。

于 2012-05-29T19:51:44.660 回答