我正在用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首歌曲并按回车键时,会创建第二个10个实例但是它们不会向已经运行的实例发送WM_COPYDATA消息。
那么,什么是使单个实例和处理数据传递给已经运行的实例的正确方法。或者,如果任何实例没有运行,那么? 我想要实现的是当有人选择几首歌曲然后按回车然后我怎么能加载这些歌曲?
答案 0 :(得分:0)
最简单的方法是使用VB类“Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase”,这是一个普通的.NET类。您需要添加对“Microsoft.VisualBasic”程序集的引用:
这会处理“单个实例”问题,并解决将数据传递给其他应用程序的问题:
What is the correct way to create a single-instance application?