谁拥有进程/主线程?

时间:2011-04-22 13:29:31

标签: wpf multithreading process

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

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

    Window1 w = new Window1();
    w.Show();
    

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

    直到这里一切都很好。

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

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

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

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

1 个答案:

答案 0 :(得分:5)

除非您设置window.Owner = mainWindow;

,否则其他窗口不是MainWindow的子窗口

此外还有Application.MainWindow属性,用于设置哪个窗口实际被视为“主窗口”。如果设置为Application.ShutdownMode,则会影响OnMainWindowClose


摘自Window.Owner参考:

  

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

     

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

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

  •   
  • 子窗口的行为不依赖于行为   父窗口;两个窗口都可以   覆盖另一个,或最小化,   最大化,并独立恢复   另一个。

  •   
     

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

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

WPF Threading Model