Question

I wrote a little WPF app that when 'closed' minimizes to the system tray (customer requirement). Double clicking pops it back up, or right click gives a context menu to exit.

But if the app is minimized, and the users navigate to Start->All Programs->The Application it starts a new instance.

What (in C#) do I need to do to get the app to maximize the running instance if the user does this rather than fire up a new instance?

Thanks!

Was it helpful?

Solution

This answer from Jon Skeet discusses using a mutex to do it

Mutex is the way to go. It's a lot less fragile than using process names etc.

However, you need to make sure the Mutex isn't garbage collected. In the case of a service (which is event driven rather than having a "main" method which runs to completion), the most sensible way of doing this is probably to put it in a static variable.

Dispose of the mutex when the service stops, so you don't need to wait for finalization or anything like that.

Matthew Brindley gives this example in the same question for 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());
   }
}

To maximize the other application you'll need to send it the message to maximize. See this article on message sending

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top