最大化系统托盘中的应用程序?

时间:2011-01-06 04:45:06

标签: c# wpf system-tray application-singleton

我写了一个小的WPF应用程序,当'关闭'时最小化到系统托盘(客户要求)。双击弹出它,或右键单击提供上下文菜单退出。

但是,如果应用程序已最小化,并且用户导航到“开始” - >“所有程序” - >“应用程序”,则会启动新实例。

如果用户执行此操作而不是启动新实例,我需要做什么(在C#中)才能使应用程序最大化正在运行的实例?

谢谢!

1 个答案:

答案 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

上的这篇文章