Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在子进程运行时从父进程退出_C#_Winforms_Process - Fatal编程技术网

C# 在子进程运行时从父进程退出

C# 在子进程运行时从父进程退出,c#,winforms,process,C#,Winforms,Process,我有一个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时我的父进程

我有一个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时我的父进程没有关闭程序?如何检测问题?

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

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

如果确定要创建子进程并终止它,则需要终止它:

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

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

是否确实调用了Form\u Load?是的,调用了Form\u Load。start.exe和父进程是同一个程序,但我检查了执行路径。因为加载事件运行时应用程序尚未启动。如果创建一个表单并立即想要终止该应用程序,则没有什么意义。只是不要创建表单。在程序中编辑Main()方法。csI在给出建议之前,我正试图准确地理解您想要实现的目标。您有一个windows窗体应用程序,它在主窗体的加载事件中启动另一个进程?这是父WinForms应用程序的唯一用途吗?