Nic*_*ros 7 c# wpf system-tray application-singleton
我写了一个小的WPF应用程序,当'关闭'最小化到系统托盘(客户要求).双击弹出它,或右键单击提供上下文菜单退出.
但是如果应用程序被最小化,并且用户导航到Start-> All Programs-> The Application,它将启动一个新实例.
如果用户执行此操作而不是启动新实例,我需要做什么(在C#中)才能让应用程序最大化正在运行的实例?
谢谢!
这个答案从乔恩斯基特讨论了使用互斥做到这一点
Mutex是要走的路.它比使用进程名称等要脆弱得多.
但是,您需要确保Mutex不是垃圾回收.在服务(事件驱动而不是"主"方法运行完成)的情况下,最明智的方法是将它放在一个静态变量中.
在服务停止时处理互斥锁,因此您无需等待最终确定或类似的事情.
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());
}
}
Run Code Online (Sandbox Code Playgroud)
为了最大化其他应用程序,您需要向其发送消息以最大化.请参阅有关邮件发送的文章