2011-01-06 15 views
7

Escribí una pequeña aplicación WPF que cuando se "cierra" minimiza a la bandeja del sistema (requisito del cliente). Al hacer doble clic, aparece una copia de seguridad o al hacer clic con el botón derecho, se abre un menú contextual.Maximizar la aplicación en la bandeja del sistema?

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#) debo hacer para que la aplicación maximice la instancia en ejecución si el usuario hace esto en lugar de iniciar una nueva instancia?

Gracias!

+2

buscar objetos Mutex y agarrar una ventana activa. no tengo el código en frente mío, pero es la dirección que debe tomar. - Mentí, pruebe [este artículo sobre instancias únicas de aplicaciones .net] (http://www.ai.uga.edu/mc/SingleInstance.html) –

Respuesta

7

Este answer de Jon Skeet explica el uso de un mutex para hacerlo

objeto mutex es el camino a seguir. Es mucho menos frágil que el uso de nombres de procesos etc.

Sin embargo, es necesario asegurarse de que el objeto mutex no se recoge la basura. En el caso de un servicio (que es el evento impulsado en lugar de tener un "principal" método que ejecuta hasta el final), la manera más sensata de hacer esto es probablemente para ponerlo en un variable estática.

Elimine el mutex cuando se detiene el servicio , por lo que no necesita esperar la finalización de ni nada de eso.

Mateo Brindley da este ejemplo de la misma pregunta para 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()); 
    } 
} 

Para maximizar la otra aplicación que necesita que le envíe el mensaje a maximizar. Ver este artículo en message sending

+0

Perfecto, gracias! – Nicros

+0

¡Tengo que retractarme de mi Perfecto! declaración: comprueba si la instancia se está ejecutando y no inicia una nueva, pero no responde la pregunta sobre cómo Maximizar la aplicación en la bandeja del sistema sin iniciar una nueva instancia. – Nicros

+0

Pfft. Permítanme retractarme de mi retractación. Perdí el enlace en la parte inferior para enviar mensajes ... lo verificará. – Nicros

Cuestiones relacionadas