Pregunta

Escribí una pequeña aplicación WPF que cuando 'cerrado' se minimiza a la bandeja del sistema (requisito del cliente). El doble clic en la copia de seguridad, o el clic derecho ofrece un menú contextual para salir.

Pero si la aplicación se minimiza y los usuarios navegan a inicio-> todos los programas-> la aplicación inicia una nueva instancia.

¿Qué (en C#) necesito hacer para que la aplicación maximice la instancia en ejecución si el usuario hace esto en lugar de disparar una nueva instancia?

¡Gracias!

¿Fue útil?

Solución

Este responder De Jon Skeet discute el uso de un mutex para hacerlo

Mutex es el camino a seguir. Es mucho menos frágil que usar nombres de procesos, etc.

Sin embargo, debe asegurarse de que el mutex no se recolecte la basura. En el caso de un servicio (que se basa en eventos en lugar de tener un método "principal" que se ejecuta hasta su finalización), la forma más sensata de hacerlo es probablemente ponerlo en una variable estática.

Deseche el mutex cuando el servicio se detenga, para que no necesite esperar la finalización o algo así.

Matthew Brindley da este ejemplo en la misma pregunta para su respuesta

[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());
   }
}

Para maximizar la otra aplicación, deberá enviarle el mensaje para maximizar. Ver este artículo en envío de mensajes

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top