2009-06-16 10 views
4

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

Je voudrais ajouter le choix de "Quitter toutes les instances", ce qui soulèvera un peu de "événement" qui notifie toutes les instances de l'application qu'ils doivent fermer. Je n'ai pas besoin de transporter de données avec cet événement.

Quelle est la meilleure façon (et de préférence la plus simple) de faire cela dans Windows en utilisant C#/.NET?

Répondre

6

Envoyer WM_CLOSE de good'ol à 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); 
} 
2

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

Process.GetProcessesByName vous énumérons tous les cas:

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

alors Process.CloseMainWindow ou Process.Close va les fermer:

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

+0

Merci. CloseMainWindow semble une bonne alternative aux trucs Win32. – xyz

Questions connexes