Domanda

Ho più istanze della stessa applicazione in esecuzione. L'utente può fare clic su " Esci " su ogni istanza per spegnerlo.

Vorrei aggiungere la scelta a "Esci da tutte le istanze", che genererà un figlio di "evento". che notifica a tutte le istanze dell'applicazione che devono chiudere. Non ho bisogno di trasportare alcun dato insieme a questo evento.

Qual è il modo migliore (e preferibilmente il più semplice) per farlo in Windows usando C # /. NET?

È stato utile?

Soluzione

Invia il buon'ol WM_CLOSE a tutte le istanze ...

Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (Process process in processes)
{
   // Compare process name, this will weed out most processes
   if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
   // Check the file name of the processes main module
   if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
   if (Process.GetCurrentProcess().Id == process.Id) 
   {
     // We don't want to commit suicide
     continue;
   }
   // Tell the other instance to die
   Win32.SendMessage(process.MainWindowHandle, Win32.WM_CLOSE, 0, 0);
}

Altri suggerimenti

La classe System.Diagnostics.Process ha diversi metodi che è possibile utilizzare.

Process.GetProcessesByName ti consente di enumerare tutte le istanze:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.getprocessesbyname.aspx

quindi Process.CloseMainWindow o Process.Close li spengono:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow.aspx http://msdn.microsoft.com/en- us / library / system.diagnostics.process.close.aspx

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