Massimizzare l'applicazione nel vassoio di sistema?
-
26-09-2019 - |
Domanda
Ho scritto una piccola app WPF che quando "chiusa" riduce al minimo al vassoio di sistema (requisito del cliente). Double Clicking lo fa il backup o il clic destro fornisce un menu contestuale per uscire.
Ma se l'app è ridotta al minimo e gli utenti navigano per avviare-> tutti i programmi-> L'applicazione inizia una nuova istanza.
Cosa (in C#) devo fare per ottenere l'app per massimizzare l'istanza in esecuzione se l'utente lo fa piuttosto che accendere una nuova istanza?
Grazie!
Soluzione
Questo Rispondere da Jon Skeet discute usando un mutex per farlo
Mutex è la strada da percorrere. È molto meno fragile rispetto all'utilizzo dei nomi dei processi ecc.
Tuttavia, è necessario assicurarsi che il mutex non sia raccolto. Nel caso di un servizio (che è guidato dagli eventi piuttosto che avere un metodo "principale" che funziona al completamento), il modo più sensato per farlo è probabilmente quello di metterlo in una variabile statica.
Smaltire il mutex quando il servizio si interrompe, quindi non è necessario aspettare la finalizzazione o qualcosa del genere.
Matthew Brindley dà questo esempio nella stessa domanda per la sua risposta
[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());
}
}
Per massimizzare l'altra applicazione dovrai inviargli il messaggio per massimizzare. Guarda questo articolo su Messaggio di invio