"Application.Current.Shutdown(-1)"不能关闭WPF应用程序。

5
我正在检查Windows认证用户是否是我的WPF应用程序的有效用户。
如果不是,我需要关闭该应用程序;但即使执行了Application.Current.Shutdown(-1),该应用程序仍然会继续运行。
下面的链接说我需要删除我的StartUpURI;但我在我的app.xaml中没有这个标签。-> 从App.xaml.cs关闭WPF应用程序 编辑:我在APP.XAML.CS中有这段代码。
protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            this.exceptionPolicy = ConfigurationManager.AppSettings.Get("ExceptionPolicy");
            this.displayErrorDetails = true;
            this.container = new UnityContainer();

            // Register services and types in Unity
            RegisterServices();

            // Check user
            if (!IsValidUser())
            {
                //Application.Current.Shutdown(); 
                App.Current.Shutdown();
            }

        }

2
你需要展示 Application.Current.Shutdown() 周围的代码。问题可能与你从哪里调用它有关。 - Joel B Fant
我的代码在 App.Xaml -> OnStartup(StartupEventArgs e)。 - Relativity
2
你能发布你整个App.xaml.cs文件的内容吗? - Nick Heidke
你需要哪段具体的代码?复制整个代码会使事情变得混乱。 - Relativity
暂时请放置整个“OnStartup”方法。只需在每行前面放置4个空格以使其正确格式化。如果这还不足够,其中的代码可能会告诉我们需要看到什么其他内容。 - Joel B Fant
2个回答

14

使用 Environment.Exit() 代替。这会尝试进行优雅的关闭,但如果无法优雅地关闭,则会粗暴地关闭 -- 强行终止线程。


1
好的,确实需要先显式调用Dispose()方法来释放对象,因为Environment.Exit将终止线程。Application.Current.Shutdown也不会调用Dispose方法,什么都不会发生。在.NET中没有自动释放机制。 - Ed Bayiates

0

我从来没有成功地关闭过启动项。我建议启动一个新的线程,在短暂延迟后使用类似于您示例中的代码关闭应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接