如何关闭 WPF 中隐藏的主窗口?
Posted
技术标签:
【中文标题】如何关闭 WPF 中隐藏的主窗口?【英文标题】:How to close a hidden main window in WPF? 【发布时间】:2020-11-21 04:28:13 【问题描述】:我在一个应用程序中有两个窗口。
第一个窗口有一个按钮。当我单击该按钮时,将打开第二个窗口。 (第一个窗口需要关闭或隐藏)。然后我需要关闭我的第二个窗口并需要停止调试。怎么做?
<Window x:Class="WpfApp5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp5"
xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
xmlns:Control="clr-namespace:Syncfusion.Windows.Tools.Controls;assembly=Syncfusion.Tools.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button Content="Create" Height="50" Width="100" Click="btncreate"></Button>
</Grid>
MainWindow 代码隐藏:
public partial class MainWindow : Window
public static TextBox textBox;
public MainWindow()
InitializeComponent();
private void btncreate(object sender, RoutedEventArgs e)
SecondWindow secondWindow = new SecondWindow();
secondWindow.Owner = this;
this.Hide();
secondWindow.ShowDialog();
第二个窗口:
<Window x:Class="WpfApp5.SecondWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp5"
mc:Ignorable="d"
Title="SecondWindow" Height="450" Width="800">
<Grid>
<StackPanel>
<TextBlock Text="New Project Loaded" HorizontalAlignment="Center" Margin="50"></TextBlock>
</StackPanel>
</Grid>
【问题讨论】:
你真的是在调试吗? 自动停止调试(不能手动) Application.Current.Shutdown();应该关闭应用程序。如果这很重要,您需要检查应用程序是否处于调试模式。 我使用 Application.Current.Shutdown()。但是这个错误来了 System.InvalidOperationException: 'Cannot set Visibility to Visible or call Show, ShowDialog, Close, or WindowInteropHelper.EnsureHandle while a Window is close.' 这个错误也来了 无法从程序集 'mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089' 加载类型 'System.Runtime.Remoting.Messaging.IRemotingFormatter'。跨度> 【参考方案1】:您的问题似乎是您正在运行显示窗口的代码,可能是模态的。 同时,您正在尝试关闭应用程序。
您尚未显示此代码,但如果您的 btnCreate 处理程序在之前已关闭
secondWindow.ShowDialog();
在将该窗口显示为对话框的同时,您会尝试有效地关闭应用程序。
您想要的是关闭应用程序的代码,而不是在 UI 忙于执行其他操作(例如显示窗口)时。
你可以通过移动你的关闭来做到这一点,所以它就是你正在显示的那个窗口的 contentrendered 事件处理程序。
另一种选择是使用调度程序安排关机。
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
Application.Current.Shutdown();
), DispatcherPriority.ContextIdle);
如果您仍然有错误,您可以考虑改用。
Environment.Exit(0);
与关闭相比,这是一种相当暴力的方法,但如果您只是在调试时这样做,那可能并不重要。
在任何情况下,您都应该确保您没有显示另一个窗口或任何窗口的 window.closure 事件中的某些内容的代码。由于关闭应用程序必然会涉及关闭窗口。
【讨论】:
以上是关于如何关闭 WPF 中隐藏的主窗口?的主要内容,如果未能解决你的问题,请参考以下文章