我写了一个小的WPF应用程序,当'关闭'时最小化到系统托盘(客户要求)。双击弹出它,或右键单击提供上下文菜单退出。
但是,如果应用程序已最小化,并且用户导航到“开始” - >“所有程序” - >“应用程序”,则会启动新实例。
如果用户执行此操作而不是启动新实例,我需要做什么(在C#中)才能使应用程序最大化正在运行的实例?
谢谢!
答案 0 :(得分:7)
Jon Skeet的这个answer讨论了如何使用互斥锁
Mutex是要走的路。这是很多 比使用进程名称更不易碎 等
但是,你需要确保 互斥锁不是垃圾收集的。在里面 服务的情况(事件 驱动而不是“主” 运行完成的方法) 最明智的做法是 可能是把它放在一个静态的 变量
在服务时处理互斥锁 停下来,所以你不需要等待 最终确定或类似的事情。
Matthew Brindley在his answer
的同一个问题中给出了这个例子[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());
}
}
要最大化其他应用程序,您需要向其发送消息以使其最大化。请参阅message sending
上的这篇文章