簡體   English   中英

C# WPF 如何正確關閉新窗口?

[英]C# WPF How to close a new window correctly?

我有一個簡單的問題:

1- 創建一個新的 WPF 項目,其中有啟動窗口: MainWindow.xaml

2- 在這個項目中,創建一個新窗口Window1.xaml

3- Windows1的加載事件,讓它關閉。

4- 將一個Open按鈕放到MainWindow上。 實現它的點擊事件。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.Close();
}

private void button_Click(object sender, RoutedEventArgs e)
{
    Window1 w = new Window1();
    w.Show();
}

當我啟動這個應用程序時,VS2015 的 UI 變成了DEBUGING MODE ,然后我點擊窗口右上角的關閉按鈕,VS2015 的 UI 回到正常模式。

現在,如果我啟動應用程序,單擊“ Open ”按鈕,然后Window1將快速顯示並關閉,但是,如果我單擊MainWindow右上角的關閉按鈕,情況會有所不同:VS2015 將不會返回正常模式,而是停留在DEBUGING MODE 所以對我來說,這意味着有東西掛在那里,我不知道它是什么。

有誰知道如何解決這個問題?

這不是答案,而只是我的一個非常有趣的觀察結果。 我做了幾次測試(打開和關閉窗口),然后轉儲了 WPF 窗口列表:

foreach (Window w in Application.Current.Windows)
    Debug.WriteLine(w.GetType().FullName)

導致:

WpfTest.MainWindow
Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow
Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow
Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow

WpfTap是 Visual Studio 的 WPF 調試器,可幫助調試 WPF 內容樹。

現在,如果我沒有使用Loaded事件,而是使用ContentRendered事件來關閉窗口,則不會發生這種情況,並且一切正常。 如果我不調試就運行.exe 也可以。

因此,看起來 Visual Studio *在* Window 的Loaded事件之后附加了 WPF 調試器,如果您過早關閉窗口,它會使調試器組件在內存中徘徊。

在 App.xaml 集中:

ShutdownMode="OnMainWindowClose"

這必須解決問題。 我建議閱讀這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM