Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实例化窗口而不显示它?_C#_Wpf - Fatal编程技术网

C# 如何实例化窗口而不显示它?

C# 如何实例化窗口而不显示它?,c#,wpf,C#,Wpf,我今天遇到了这个问题,在试图解决它的时候,我在WPF中发现了一些奇怪的东西 要查看问题,请创建新的WPF应用程序,添加按钮并单击事件: private void Button_Click(object sender, RoutedEventArgs e) { var window = new MainWindow(); } 启动应用程序并关闭它而不点击按钮将工作 启动应用程序,单击按钮并关闭它-将不起作用 应用程序将保留在内存中。几个月前我有过,但若我使用它的解决方案,那个么另一件奇怪

我今天遇到了这个问题,在试图解决它的时候,我在WPF中发现了一些奇怪的东西

要查看问题,请创建新的WPF应用程序,添加按钮并单击事件:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var window = new MainWindow();
}
启动应用程序并关闭它而不点击按钮将工作

启动应用程序,单击按钮并关闭它-将不起作用

应用程序将保留在内存中。几个月前我有过,但若我使用它的解决方案,那个么另一件奇怪的事情就会发生:当退出应用程序时,
Window.Closed事件会为一个从未显示的窗口触发


问题:WPF在实例化窗口时做什么?为什么我不能像其他类一样简单地实例化它?我必须始终显示它吗?

我相信你从错误的角度看这个问题。如果不打算显示窗口,则不需要以这种方式创建窗口

您面临的问题是,您在单击事件上创建的窗口从未被释放(这发生在您调用
Close
时),因此UI循环将继续执行,应用程序将永远不会退出

关闭外部/可见窗口时,也可以通过调用
Close
来避免这种情况

    private Window window;

    public MainWindow()
    {
        InitializeComponent();
    }

    public void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        window = new MainWindow();
    }

    protected override void OnClosed(EventArgs e)
    {
        if (window != null)
        {
            // Call Close on the window you created when the main main closes
            window.Close(); 
        }

        base.OnClosed(e);
    }
您需要使用私有字段,以便在调用
OnClosed
事件时保留引用


我已经用一个简单的WPF应用程序对此进行了测试;但是,您不应在单击事件上实例化相同的窗口类型(即,
MainWindow
)。我这样做是为了简单,但这完全没有必要。

对不起,我误解了您想要实现的目标。你是在试图创建一个窗口,然后在关闭主/外窗口时自动销毁它吗?@rae1,有点像。我不关心窗口会发生什么,我只需要它的实例(它将加载xaml、init everything等),这样我就可以使用它了。但我一点也不想显示窗口。这很有效。现在我必须考虑如何使其适应我的应用程序,因为在那里仅为window的本地实例调用
Close
,将关闭整个应用程序。我认为
app.xaml
有一些特性。同样,您可能必须重新考虑您的体系结构,因为这是一种黑客行为,不应该在应用程序范围内实现。不管怎样,我都乐意帮忙我似乎不得不使用
黑客
。我可以在这个老问题上再加一句,看看是否有人能提供更好的架构。是的,在离开活动之前关闭窗口会产生所有的魔力。唯一缺少的是
App.xaml
中的
ShutdownMode=“OnExplicitShutdown”