【问题标题】:Data passing in single instance application of C#在 C# 的单实例应用程序中传递数据
【发布时间】:2014-02-09 20:44:18
【问题描述】:

我正在用 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 消息。

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

【问题讨论】:

标签: c# winapi ipc audio-player single-instance


【解决方案1】:

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

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

What is the correct way to create a single-instance WPF application?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多