【问题标题】:Exit from parent process when child is running子进程运行时退出父进程
【发布时间】:2012-01-15 13:12:04
【问题描述】:

我有一个 WinForms 应用程序。这是来自 Form_Load 方法的代码。

Process proc = new Process();
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe";
proc.StartInfo.Arguments = Application.ExecutablePath;
proc.Start();

Application.Exit();

当我调用 Application.Exit 时,为什么我的父进程没有关闭程序?如何发现问题?

【问题讨论】:

  • 因为 Load 事件运行时应用程序尚未启动。如果创建表单并立即想要终止应用程序几乎没有意义。只是不要创建表单。在 Program.cs 中编辑 Main() 方法
  • 在给出建议之前,我试图准确了解您想要达到的目标。您有一个 Windows 窗体应用程序,它在主窗体的加载事件中启动另一个进程?这是父 WinForms 应用程序的唯一用途吗?

标签: c# winforms process


【解决方案1】:

一旦您启动一个新进程,它的生命周期就与您当前应用程序的生命周期无关。如果您想要一个与当前应用程序的生命周期直接相关的执行工件,请使用线程。

如果你确定要创建一个子进程然后终止它,你需要杀死它:

Process proc = new Process();
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe";
proc.StartInfo.Arguments = Application.ExecutablePath;
proc.Start();

// When terminating:
proc.Kill();
proc.WaitForExit();
Application.Exit();

但是,我不建议在大多数情况下使用上述方法,因为如果子进程在执行关键操作(例如保存到文件)时被杀死,可能会导致数据损坏。

【讨论】:

    【解决方案2】:

    要退出 Windows 窗体应用程序,您应该关闭主窗体。查看 Program.Main() 中的代码,您会发现使主线程保持活动状态的是主窗体。关闭它,应用程序将退出。

    【讨论】:

    • 你确定 Form_Load 被调用了吗?
    • 是的,Form_load 被调用。 start.exe 和父进程是同一个程序,但我检查了执行路径。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多