C# 使用进程在winforms中显示外部程序

C# 使用进程在winforms中显示外部程序,c#,winforms,process,C#,Winforms,Process,我试图将外部程序的一部分(窗口的一部分)嵌入到我正在开发的现有WinForm中 下面是网上的例子,我得出了以下结论。我假设流程名称是唯一的、单数的,并且它已经打开,在示例中: private void button1_Click(object sender, EventArgs e) { Process[] myProc = Process.GetProcessesByName("the_external_program_i_want"); Process p = myProc[

我试图将外部程序的一部分(窗口的一部分)嵌入到我正在开发的现有WinForm中

下面是网上的例子,我得出了以下结论。我假设流程名称是唯一的、单数的,并且它已经打开,在示例中:

private void button1_Click(object sender, EventArgs e)
{
    Process[] myProc = Process.GetProcessesByName("the_external_program_i_want");
    Process p = myProc[0];
    IntPtr appWin = p.MainWindowHandle;
    SetParent(appWin, this.Handle);
    SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
    MoveWindow(appWin, panel1.Location.X, panel1.Location.Y, panel1.Width, panel1.Height, true);
}
我的问题是,在我关闭WinForm后,我意识到这个外部程序将触发一个弹出框,显示“program_name已停止工作”

我的问题是,在WinForm中是否需要调用其他函数来正确关闭外部程序


谢谢

首先,使整个类都能访问
p
变量。 然后将事件侦听器添加到FormClosing事件:

this.FormClosing += Window_FormClosing;

void Window_FormClosing(object sender, FormClosingEventArgs e)
{
    p.Kill();
}

谢谢真不敢相信这么简单。