Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果应用程序已经运行,如何将参数重新发送到应用程序,并使用这些参数刷新应用程序_C#_.net_Winforms_Command Line Interface - Fatal编程技术网

C# 如果应用程序已经运行,如何将参数重新发送到应用程序,并使用这些参数刷新应用程序

C# 如果应用程序已经运行,如何将参数重新发送到应用程序,并使用这些参数刷新应用程序,c#,.net,winforms,command-line-interface,C#,.net,Winforms,Command Line Interface,我有个问题。我会有一个视频播放器,作为c#form应用程序接收简单的参数。为了更好地理解编程,我希望只运行一个应用程序实例,并在发出open命令时使用新参数刷新它。我可以对它进行编程,这样当它收到信号时,就可以刷新视频()或类似的东西 伪示例: //app is started from cmd line //open app for first time vidViewer.exe("lotr.avi", "44:44"); //keep instance open but have it

我有个问题。我会有一个视频播放器,作为c#form应用程序接收简单的参数。为了更好地理解编程,我希望只运行一个应用程序实例,并在发出open命令时使用新参数刷新它。我可以对它进行编程,这样当它收到信号时,就可以刷新视频()或类似的东西

伪示例:

//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部电影。我只想保持在一点

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

谢谢大家,
Kevin

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

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

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

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


好的,我有第一步,在这里使用这个示例。现在来实现WCF。我已经对我的帖子做了一些更新(如果您使用绑定到固定端口的自托管WCF服务,您可能不需要使用
互斥锁);道格拉斯,我很感谢你的反馈。我还研究了内存映射文件和窗口消息。(保持选项开放和学习)足够公平。WCF有一个陡峭的学习曲线,所以如果你还不熟悉它,你可能会选择更简单的东西。即使是一个普通的老员工也能做到这一点。