c# - 使用数据绑定(bind)和线程关闭 WPF 应用程序

标签 c# wpf memory-management data-binding

我正在尝试正确关闭我的应用程序。我的应用程序使用数据绑定(bind),访问数据库几次,并且可能还运行了一些先天威胁。

由于 Application.Current.Shutdown() 在这种情况下没有关闭所有内容,所以我查看了 Application.Current.Dispatcher.BeginInvokeShutdown()

BeginInvokeShutdown() 需要一个 System.Windows.Threading.DispatcherPriority 参数。这可以是:

  • 无效 - 枚举值为 -1。这是一个无效的优先级。
  • Inactive - 枚举值为 0。未处理操作。
  • SystemIdle - 枚举值为 1。在系统空闲时处理操作。
  • ApplicationIdle - 枚举值为 2。在应用程序空闲时处理操作。
  • ContextIdle - 枚举值为 3。在后台操作完成后处理操作。
  • 背景 - 枚举值为 4。在所有其他非空闲操作完成后处理操作。
  • Input - 枚举值为 5。操作的处理优先级与输入相同。
  • Loaded - 枚举值为 6。操作在布局和渲染完成时处理,但就在为输入优先级的项目提供服务之前。具体来说,这在引发 Loaded 事件时使用。
  • Render - 枚举值为 7。以与渲染相同的优先级处理操作。
  • DataBind - 枚举值为 8。操作的处理优先级与数据绑定(bind)相同。
  • Normal - 枚举值为 9。以正常优先级处理操作。这是典型的应用程序优先级。
  • Send - 枚举值为 10。操作在其他异步操作之前处理。这是最高优先级。

现在,假设我的应用程序仅在出现问题时关闭。这意味着应用程序无需完成任何操作,只需进行原始关闭,以便用户可以重新启动应用程序。我说我必须将 Inactive 作为参数是正确的吗?如果我将 Send 作为参数,是否在完全关闭之前一切都已完成?

最佳答案

Application.Current.Shutdown() 应该适用于您的情况,只要您的线程是后台线程。它们是如何创建的?如果您只是新建一个 Thread 对象,您应该能够将 IsBackground 属性设置为 true。如果它们需要成为前台线程,您需要在关闭时手动停止循环。

至于你的实际问题,据我了解 BeginInvokeShutdown 仍将处理 UI 线程队列中的所有内容,但不会接受任何更多操作。优先级似乎类似于普通的线程优先级设置,因为它与 CPU 使用率相关,并且具有将调用的任务结束到处理队列前端的额外能力。

关于c# - 使用数据绑定(bind)和线程关闭 WPF 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068667/

相关文章:

C# 异步逻辑到同步调用

wpf - 给定 WPF 控件的内容之一,如何获取 ElementHost 控件

apache-flex - 在避免数据绑定(bind)的同时在 MXML 中设置变量?

python - Tensorflow 在打开和关闭每个 session 时泄漏 1280 字节?

PHP 内存耗尽错误、糟糕的代码或只是增加内存限制?

c# - SQL Server 连接计数问题

c# - 为什么我的 WebClient 上传文件代码挂起?

wpf - 如何修复圆角按钮中边框和背景之间的空白区域?

c# - 为什么这个编译错误

c# - 如何检查桌面 GUI 应用程序中是否存在密码字段?