C#-如何将主窗体与子窗体一起关闭(而子窗口只能在主窗体关闭时关闭)

C#-如何将主窗体与子窗体一起关闭(而子窗口只能在主窗体关闭时关闭),c#,forms,children,C#,Forms,Children,我有一个主窗口和几个子窗口。子窗口包含一些数据,因此我不希望它们被关闭。所以我在FormClosing中设置e.Cancel=true时隐藏了它们 但是当我想关闭主窗口时(退出应用程序)。我很难退出它。首先,它不会关闭。但是有一个额外的变量需要注意,我正在关闭,我需要点击两下才能真正关闭它(问题是在执行onFormClosing(mainWIndow,…)之前,框架尝试关闭子对象,这将首先隐藏它们自己) 我如何在一次单击中全部关闭它们 我还希望避免Application.Exit()因为我需要确

我有一个主窗口和几个子窗口。子窗口包含一些数据,因此我不希望它们被关闭。所以我在FormClosing中设置
e.Cancel=true时隐藏了它们

但是当我想关闭主窗口时(退出应用程序)。我很难退出它。首先,它不会关闭。但是有一个额外的变量需要注意,我正在关闭,我需要点击两下才能真正关闭它(问题是在执行
onFormClosing(mainWIndow,…)
之前,框架尝试关闭子对象,这将首先隐藏它们自己)

我如何在一次单击中全部关闭它们


我还希望避免
Application.Exit()因为我需要确保所有线程都正确关闭。所以最好是彻底结束。

您可以使用application.Exit()强制应用程序。

我自己找到了解决方案:

// ...
if (sender == this) // main
{
    exitApp = true;
    FormClosing -= onFormClosing;
    Close();
}
// ...

我有每个软件都需要“关闭”的外围设备,因为如果我不这样做,需要手动操作,这是不好的。我需要避免
Application.Exit()。还有其他想法吗?你不应该把孩子藏起来。它们仍将被实例化,主窗体将引用它们。关上它们。然后处理它们。
// ...
if (sender == this) // main
{
    exitApp = true;
    FormClosing -= onFormClosing;
    Close();
}
// ...