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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top