我正在尝试正确关闭我的应用程序。我的应用程序使用数据绑定,几次访问数据库,并且可能还有一些固有的威胁在运行。
由于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
作为参数,一切都在完全关闭之前完成了吗?
答案 0 :(得分:1)
Application.Current.Shutdown()
就可以在您的情况下工作。他们是如何被创造出来的?如果您只是在新建一个Thread对象,那么您应该能够将IsBackground属性设置为true
。如果它们需要是前台线程,则需要在关闭时手动停止循环。
至于你理解的实际问题BeginInvokeShutdown
仍将处理UI线程队列中的所有内容,但不会再接受任何操作。优先级似乎与普通线程优先级设置类似,因为它与CPU使用率相关,并具有将调用任务结束到处理队列前面的额外功能。