在 C# 的单实例应用程序中传递数据



我正在用C#创建一个音乐播放器。
它是用 C# [ WinForms ] 制作的单实例应用程序。目前,为了使其成为单个实例,我正在使用以下方法。

public static Process PriorProcess()
{
    Process curr = Process.GetCurrentProcess();
    Process[] procs = Process.GetProcessesByName(curr.ProcessName);
    foreach (Process p in procs)
    {
        if ((p.Id != curr.Id) && (p.MainModule.FileName == curr.MainModule.FileName))
        {
                return p;
        }
    }
    return null;
}

现在,每当我们将一些歌曲传递给应用程序时,如果应用程序已经在运行,那么歌曲路径就会使用 SendMessage() 函数和 WM_COPYDATA 结构传递给已经在运行的实例。它工作正常。
但是,当我同时选择一些歌曲(例如一次 10 首歌曲并按 Enter 键)时,会创建第二个 10 个实例,但它们不会向已经在运行的实例发送WM_COPYDATA消息。

那么,创建单个实例并处理传递到已运行的实例的数据的正确方法是什么?或者,如果任何实例未运行,那么?
我想实现的是,当有人选择几首歌曲并按回车键时,我该如何加载这些歌曲?

最简单的方法是使用 VB 类Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase,这是一个普通的.NET class
您需要添加对程序集Microsoft.VisualBasic引用:

这将处理单实例问题并解决将数据传递给其他应用程序的问题:

创建单实例 WPF 应用程序的正确方法是什么?

最新更新