Maximizar la aplicación en la bandeja del sistema?
-
26-09-2019 - |
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!
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