使用数据绑定和线程关闭WPF应用程序



我正在尝试正确关闭我的应用程序。我的应用程序使用数据绑定,访问数据库几次,可能也存在一些固有的威胁。

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

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

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

现在,假设我的应用程序只有在出现问题时才会关闭。这意味着应用程序不需要完成任何操作,只需要原始关闭,用户就可以重新启动应用程序。我说我必须给出Inactive作为论据,这是正确的吗?如果我给Send作为自变量,在完全关闭之前一切都结束了,这是真的吗?

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

至于您的实际问题,据我所知,BeginInvokeShutdown仍将处理UI线程队列中的所有内容,但不会接受任何其他操作。优先级似乎与正常的线程优先级设置类似,因为它与CPU使用率有关,并具有将调用的任务终止在处理队列前面的额外能力。

最新更新