WPF应用程序不加载窗口自动发布

时间:2018-10-03 08:26:44

标签: c# wpf

我已经设置了WPF应用程序,以使其不会通过如下所示修改app.xaml.cs并将构建操作设置为Page来自动加载窗口。我还从app.xaml中删除了starturl。我已经介绍了一个控制器类,从该类中可以启动应用程序,如下面的代码以及在控制器的构造函数中所见,我已经创建并打开了一个新窗口。我删除了打开应用程序时自动生成的原始MainWindow。

无论如何,问题是打开打开我在控制器中添加的新窗口后,我随后关闭了窗口,应用程序终止了吗?为什么?我不希望该应用程序终止,并且我不明白为什么它在关闭窗口时终止。或者换一种说法,我如何引入一个不会导致应用程序在关闭窗口时终止的窗口?任何帮助表示赞赏。

using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace UserTraining
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        App()
        {
            InitializeComponent();
        }

        [STAThread]
        static void Main()
        {            
            App app = new App();
            UserTrainingController control = new UserTrainingController();
            app.Run();
        }

    }
}

UserTrainingController类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace UserTraining
{
    class UserTrainingController
    {
        public UserTrainingController()
        {
            IntroductionWindow w = new IntroductionWindow();
            w.Show();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

调用UserTrainingController后,您将在屏幕上显示带有w.Show();的窗口。关闭窗口时,w.Show();终止并返回到调用者,这是Main方法。这是堆栈上的最后一个方法。

但是随后您运行另一个方法app.Run(),但是它立即终止,返回到Main方法,该方法在app.Run()之后不再需要执行,因此也终止了。 / p>

由于它是堆栈上的最后一个方法,所以堆栈为空,这意味着您的应用程序已完成。

您需要具有一些父窗口,从中可以打开您的自定义窗口。

通常,您必须防止堆栈清空:)

答案 1 :(得分:1)

WPF应用程序具有ShutdownMode属性,其值为ShutdownMode enumeration的成员之一。它具有三个可能的值:OnExplicitShutdown,OnLastWindowClose和OnMainWindowClose。

默认设置为OnLastWindowClose,这意味着当最后一个窗口关闭或调用httpClient.ws(host = "echo.websocket.org") { send(Frame.Text("Hello World")) for (message in incoming.map { it as? Frame.Text }.filterNotNull()) { println(message.readText()) } } httpClient.wss(host = "echo.websocket.org") { send(Frame.Text("Hello World")) for (message in incoming.map { it as? Frame.Text }.filterNotNull()) { println(message.readText()) } } 时,应用程序将关闭。我怀疑这就是为什么您的应用程序在关闭IntroductionWindow时终止的原因。

您需要做的是将ShutdownMode设置为OnExplicitShutdown。这样,您的应用程序只会在您明确调用Application.Shutdown()时终止。

您可以在代码中或在App.xaml文件中设置ShutdownMode属性。