c# - 应用程序的新实例

标签 c# .net wpf

我在我的电脑上制作了 MP3 文件以与我的媒体播放器相关联。 因此,当我在资源管理器中双击 MP3 文件时,媒体播放器显然会启动并播放它。

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

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

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

我所需要的只是将文件的路径传递给当前实例。我该怎么做??

最佳答案

基本上,您必须将其构建到您的应用程序中。

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

这些对我来说似乎有点脏。

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

  1. 寻找您的应用程序的运行实例。
  2. 向它发送数据以停止当前歌曲并播放这首新歌曲。
  3. 如果应用程序未运行,它只会在命令行中使用歌曲启动它。

要从这个其他 exe 发送您的应用程序数据,您可以查看 IPC: Interprocess communication for Windows in C# (.NET 2.0)

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

我认为保留两个独立的 exe 文件比构建您的应用程序以与其之前的实例对话更容易和更清晰。

关于c# - 应用程序的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361379/

相关文章:

c# - 使用 .Net win 窗体中的 cmd.exe 在命令行实用程序中运行多个命令

.net - Composable 到底是什么意思?

c# - 无法立即连接到新创建的 SQL Server 数据库

c# - 在 ControlTemplate.Resources 中绑定(bind)到 TemplatedParent

c# - WebBrowser 样式在 WinForms 中应用不正确

c# - 如果 MSDN 中没有记录,如何确定某个方法可以抛出哪些异常?

c# - 如何在没有 Visual Studio 帮助的情况下使用 Microsoft.VisualStudio.TestTools.UnitTesting 为程序添加单元测试?

WPF - 在使用 MVVM 的 3 层架构设计中将 DAL 放在哪里?

c# - 如何保持 UserControl 的纵横比?

c# - EF6 Linq 查询。仅包括返回子表的第一个条目