我写了一个小 WPF 应用程序,当“关闭”时最小化到系统托盘(客户要求)。双击将其弹出,或右键单击提供上下文菜单以退出。
但是如果应用程序被最小化,并且用户导航到开始->所有程序->应用程序,它会启动一个新实例。
如果用户这样做而不是启动新实例,我需要做什么(在 C# 中)让应用程序最大化正在运行的实例?
谢谢!
我写了一个小 WPF 应用程序,当“关闭”时最小化到系统托盘(客户要求)。双击将其弹出,或右键单击提供上下文菜单以退出。
但是如果应用程序被最小化,并且用户导航到开始->所有程序->应用程序,它会启动一个新实例。
如果用户这样做而不是启动新实例,我需要做什么(在 C# 中)让应用程序最大化正在运行的实例?
谢谢!
Jon Skeet 的这个答案讨论了使用互斥锁来做到这一点
互斥锁是要走的路。它比使用进程名称等要脆弱得多。
但是,您需要确保 Mutex 没有被垃圾回收。在服务的情况下(它是事件驱动的,而不是有一个运行到完成的“主”方法),最明智的做法可能是将它放在一个静态变量中。
服务停止时处理互斥锁,因此您无需等待完成或类似的事情。
马修布林德利在同一个问题中给出了这个例子作为他的回答
[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());
}
}
要最大化其他应用程序,您需要向它发送消息以最大化。请参阅这篇关于消息发送的文章