c# - 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();
}
这实际上有效,应用程序立即关闭,但我想知道这是否会导致任何问题。
解决方案
感谢大家的见解。
我今天更深入地研究了它(我承认有一些帮助),特别是因为这个问题在早期版本中没有出现,并且该应用程序已经开发了好几年。因此,追溯问题最初出现的地方可以提供一些见解。
事实证明,有一个带有无效来源的 MediaElement 导致了这个问题。将不存在的文件作为 MediaElement 的源显然不会在应用程序运行时产生任何问题,但会导致它在关闭时非常慢。幸运的是,这很容易解决。
再深入一点,我注意到有一个仍在运行的故事板也可能会减慢关闭过程,但这只是两三秒的问题。MediaelEment 的问题可能会导致(远)超过十秒的延迟。
所以问题解决了,但我的问题,虽然现在是学术性的,但或多或少仍然存在:通过简单地杀死进程来关闭应用程序是否有问题?这似乎仍然是关闭事物的最快方法。
推荐阅读
- git - 如何从位于 GIT superrepo 中的 GIT subrepos 中提取
- android - adb 将保持 tcpip 会话活动多长时间?
- python-3.x - 字符串和条件:一个循环返回真假,为什么输出只返回一个真作为结果
- ios - SceneKit 无法加载 dae,geotery 为 nil
- matrix - 在 Julia 中严格定义列向量(一列矩阵)
- ios - Swift:如何以编程方式推进容器视图内的 UIPageViewController?
- kubernetes - 在 macOS 上设置 Minikube 的几个问题
- python - 打印语句不从 if 语句打印
- ios - 尝试在 Xcode 10.1 中归档 iOS 应用程序时出现 Clang 错误
- python - 如何知道一个类是否被设置为一个值