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

时间:2013-02-25 13:57:53

标签: c# wpf memory-management data-binding

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

由于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作为参数,一切都在完全关闭之前完成了吗?

1 个答案:

答案 0 :(得分:1)

只要您的线程是后台线程,

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

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