Question

J'ai plusieurs instances de la même application en cours d'exécution. L'utilisateur peut cliquer sur " Quitter " sur chaque instance pour l'éteindre.

Je voudrais ajouter le choix à "Quit All Instances", ce qui donnera lieu à un événement "événement". qui informe toutes les instances de l'application qu'elles doivent fermer. Je n'ai pas besoin de transporter de données avec cet événement.

Quel est le meilleur moyen (et de préférence le plus simple) de le faire sous Windows en utilisant C # /. NET?

Était-ce utile?

La solution

Envoyez le good'ol WM_CLOSE à toutes les instances ...

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);
}

Autres conseils

La classe System.Diagnostics.Process comporte plusieurs méthodes que vous pouvez utiliser.

Process.GetProcessesByName vous permettra d’énumérer toutes les instances:

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

puis Process.CloseMainWindow ou Process.Close les arrêtera:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top