应用程序的新实例

时间:2012-11-13 13:15:54

标签: c# .net wpf

我已经在我的计算机上制作MP3文件以与我的媒体播放器关联。 因此,当我双击浏览器中的MP3文件时,很明显媒体播放器会启动并播放它。

我的问题 我可以防止弹出多个实例,但是如何将新实例的文件路径传输到我已经使用的实例

我想要发生什么: 我双击一首歌,......我正在听它 我双击另一首歌 并且当前的歌曲应该停止并且新歌应该开始播放,而不会弹出应用程序的新实例。

我使用Mutex检查是否已有正在运行的实例。 要获取文件路径,我使用Environment.GetCommandLineArgs()

我只需要将文件的路径传递给当前实例。我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

基本上你必须将它构建到你的应用程序中。

当用户点击第二首歌曲时,您必须有一些方法让当前实例终止应用程序的上一个实例或向其发送消息。

这对我来说似乎有点脏。

我认为一种干净的方法是编写一个与媒体文件相关联的小app_booter.exe。单击媒体文件时,它会启动此_app_booter_,其中:

  1. 查找正在运行的应用程序实例。
  2. 向其发送数据以停止播放当前歌曲并播放新歌曲。
  3. 如果应用程序未运行,则只需在命令行中使用歌曲启动它。
  4. 要从其他exe发送您的应用程序数据,您可以查看IPC: Interprocess communication for Windows in C# (.NET 2.0)

    我认为上面提到的WM_COPYDATA方法或者tcp套接字就足够了,因为你的数据非常简单,只是一个文件路径,也许是一个命令。

    我认为保留两个独立的前提会比构建你的应用程序与之前的实例交谈更容易,更清晰。

答案 1 :(得分:2)

我认为你正在寻找这个http://wpfinstanceawareapp.codeplex.com/

为单个实例应用程序提供可以将命令行参数传递给第一个实例的功能。

答案 2 :(得分:0)

在检查互斥锁后的Main中,从参数中获取歌曲并触发Play(FileInfo filename)事件以播放该歌曲。您的表单应该处理此事件(或更好的控制器类)