谁拥有进程/主线程?

Asd*_*dfg 2 wpf multithreading process

我用两个窗口创建了新的WPF应用程序.

  1. MainWindow.xaml
  2. Window1.xaml

在MainWindow.xaml中添加了一个按钮,并在按钮的单击事件中编写了以下代码:

Window1 w = new Window1();
w.Show();
Run Code Online (Sandbox Code Playgroud)

我点击了那个按钮2-3次,它打开了Window1的多个实例.

一切都很好,直到这里.

现在,我关闭了MainWindow并且它没有关闭Windows1的实例.

我在想,因为MainWindow是拥有Process的那个,如果它关闭,其余的子窗口将自动关闭.

我在WinForms应用程序中执行了相同的项目,结果完全不同.在关闭MainWindow时,它确实关闭了其余的窗口.

我不明白这个概念吗?有人能告诉我谁拥有WPF中的进程或主线程?

H.B*_*.B. 5

除非您设置,否则其他窗口不是MainWindow的子窗口 window.Owner = mainWindow;

此外,还有一个Application.MainWindow属性设置哪个窗口实际上被视为"主窗口".这会影响Application.ShutdownModeif设置为OnMainWindowClose.


摘录自Window.Owner参考文献:

当父窗口通过调用ShowDialog打开子窗口时,在父窗口和子窗口之间建立隐式关系.这种关系强制执行某些行为,包括最小化,最大化和恢复.

但是,当父窗口通过调用Show创建子窗口时,子窗口与父窗口没有关系.这意味着:

  • 子窗口没有父窗口的引用.

  • 子窗口的行为不依赖于父窗口的行为; 任何一个窗口都可以覆盖另一个窗口,或者最小化,最大化,并且可以独立于另一个窗口进行恢

为了允许您在子窗口和父窗口之间创建关系,Window支持所有权的概念.当窗口的所有者属性(拥有的窗口)设置为引用另一个窗口(所有者窗口)时,建立所有权.

应用程序根类: System.Windows.Application

WPF线程模型