首页 > 解决方案 > WPF C# 应用程序在关闭后继续运行几秒钟。这是一个安全的解决方案吗?

问题描述

我有一个带有关闭按钮的 WPF 应用程序,它调用 Application.Shutdown() 来关闭应用程序。窗口关闭,但应用程序继续运行。在 Visual Studio 中可以清楚地看到正在发生的事情,但暂停不再起作用。

我在这里看到了类似的问题,这使我尝试了其他一些解决方案。我已经尝试了 App.xaml 中 ShutdownMode 的所有选项,但它们似乎都没有任何作用。与 Environment.Exit() 相同。

明显的原因是线程仍在运行,但我找不到任何这样的线程。

我终于在 App.xaml 中使用了一个非常不优雅的方法:

protected override void OnExit(ExitEventArgs e)
{
    base.OnExit(e);
    Process proc = System.Diagnostics.Process.GetCurrentProcess();
    proc.Kill();
}

这实际上有效,应用程序立即关闭,但我想知道这是否会导致任何问题。

标签: c#wpfexit

解决方案


感谢大家的见解。

我今天更深入地研究了它(我承认有一些帮助),特别是因为这个问题在早期版本中没有出现,并且该应用程序已经开发了好几年。因此,追溯问题最初出现的地方可以提供一些见解。

事实证明,有一个带有无效来源的 MediaElement 导致了这个问题。将不存在的文件作为 MediaElement 的源显然不会在应用程序运行时产生任何问题,但会导致它在关闭时非常慢。幸运的是,这很容易解决。

再深入一点,我注意到有一个仍在运行的故事板也可能会减慢关闭过程,但这只是两三秒的问题。MediaelEment 的问题可能会导致(远)超过十秒的延迟。

所以问题解决了,但我的问题,虽然现在是学术性的,但或多或​​少仍然存在:通过简单地杀死进程来关闭应用程序是否有问题?这似乎仍然是关闭事物的最快方法。


推荐阅读