【问题标题】:How to close Child Process without affecting on the Parent Process如何在不影响父进程的情况下关闭子进程
【发布时间】:2013-07-16 18:10:53
【问题描述】:

我有一个表单 (MainForm)MainForm 有一个按钮可以调用 Editor.exe。 exe调用者代码显示如下:

private void InsertEquaButtonClick(object sender, EventArgs e)
{
    Process p = Process.Start(Editor.exe);
    string test = p.ProcessName;
    p.WaitForExit();
}

Editor.exe 是一个单独的可执行文件,它提供了一个用户输入表单;用户在该表单中输入一个图像文件后,单击“确定”按钮,它将关闭,该图像将放入 MainForm。

这是确定按钮的代码:

.......
encoder.Save(s);// Save image to MainForm

var processes = Process.GetProcessesByName("Editor");
foreach (Process proc in processes)
{
    proc.CloseMainWindow(); // Propblem is here
    //   proc.Close();  
}
..........         

问题是当我在编辑器中单击确定按钮时,所有应用程序(MainForm 和 Editor.exe)都会关闭。

那么,如何在不杀死 MainForm 进程(父进程)的情况下杀死 Editor.exe(子进程)?

我试过了:

proc.close()

pro.Kill()

...

但它们不起作用。

提前感谢您的帮助。

【问题讨论】:

  • 出于好奇,您为什么要调用一个完全独立的可执行文件,而不是将编辑器作为项目/解决方案的一部分?另外,你有没有设置断点来检查processes的内容?
  • 为什么需要手动关闭进程?你不能在 OK 按钮处理程序中做this.Close() 吗?
  • @Logarr :因为 Editor.exe 是另一个我无法放入我的项目的项目。当我在进程内容编辑器进程和 MainForm 进程中调试时。但是当我关闭编辑器进程时,主窗体进程也会立即关闭
  • @KendallFrey :我一直在尝试 this.Close() 但是当编辑器中的表单关闭然后 MainForm 也关闭时,我想在编辑器中关闭表单但 MainForm 仍然可以插入更多输入

标签: c# forms process children


【解决方案1】:

可能是以下链接可以帮助您实现您想做的事情:

Code Snippet: Terminate all child processes

【讨论】:

  • 感谢您在聊天论坛中编辑问题和建议的帮助!我的问题是我的伙伴在 Mainform 中使用了我不知道的线程!
【解决方案2】:

问题是因为我的伙伴在我们的项目中使用线程运行得更快,所以当我在编辑器中关闭进程时它会关闭线程。 ....这是有问题的原因 谢谢你

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2015-02-15
    • 2015-08-06
    • 2019-03-05
    • 2012-03-10
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多