.NET inter-process & # 8220; events & # 8221;
Pregunta
Tengo varias instancias de la misma aplicación en ejecución. El usuario pregunta puede hacer clic en " Salir " en cada instancia para apagarlo.
Me gustaría agregar la opción a " Salir de todas las instancias " ;, que creará un evento secundario de " " que notifica a todas las instancias de la aplicación que deben cerrar. No necesito transportar ningún dato junto con este evento.
¿Cuál es la mejor manera (y preferiblemente la más simple) de hacer esto en Windows usando C # / .NET?
Solución
Envíe el good'ol WM_CLOSE a todas las instancias ...
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);
}
Otros consejos
La clase System.Diagnostics.Process tiene varios métodos que puedes usar.
Process.GetProcessesByName te permitirá enumerar todas las instancias:
http://msdn.microsoft.com /en-us/library/system.diagnostics.process.getprocessesbyname.aspx
luego Process.CloseMainWindow o Process.Close los cerrará:
http://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow.aspx http://msdn.microsoft.com/en- us / library / system.diagnostics.process.close.aspx