【发布时间】: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