.NET进程间“事件”

时间:2009-06-16 13:18:29

标签: c# .net windows ipc

我运行了同一个应用程序的多个实例。用户询问可以在每个实例上单击“退出”以关闭它。

我想将选项添加到“退出所有实例”,这将引发一些“事件”的孩子,它通知应用程序的所有实例应该关闭。我不需要随此事件传输任何数据。

使用C#/ .NET在Windows中执行此操作的最佳(最好是最简单)方法是什么?

2 个答案:

答案 0 :(得分:6)

将good'ol WM_CLOSE发送给所有实例......

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

答案 1 :(得分:2)

System.Diagnostics.Process类有几种可以使用的方法。

Process.GetProcessesByName将允许您枚举所有实例:

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

然后Process.CloseMainWindow或Process.Close将关闭它们:

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

相关问题