我写了一个小的WPF应用程序,当“关闭”时它最小化到系统托盘(客户要求)。双击弹出,右键点击可退出。但是,如果应用程序被最小化,并且用户导航到开始->所有程序->该应用程序,则会启动一个新实例。在C#中,我需要做什么来使应用程序最大化运行实例,而不是启动新实例?谢谢!
这篇Jon Skeet的回答讨论了使用互斥锁的方法。
互斥锁是可行的方式。它比使用进程名称等方式更加稳定。
然而,你需要确保互斥锁不会被垃圾回收。对于一个服务(它是事件驱动的,而不是具有“main”方法的应用程序),最明智的做法可能是将它放在静态变量中。
当服务停止时,请处理互斥锁,这样你就不需要等待最终化或类似的操作。
Matthew Brindley在同一个问题中提供了他的回答示例。
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}