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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top