代码之家  ›  专栏  ›  技术社区  ›  Reto Meier

.NET进程间“事件”

  •  4
  • Reto Meier  · 技术社区  · 15 年前

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

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

    在使用c/.net的Windows中,最好(最好是最简单)的方法是什么?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Otávio Décio    15 年前

    将good'ol wm_发送到所有实例…

    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
  •  2
  •   kirkus    15 年前

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

    process.getprocessbyname将允许您枚举所有实例:

    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