我试图正常关闭我的应用程序。我的应用程序使用数据绑定,访问数据库几次,并可能有一些先天的威胁运行。使用数据绑定和线程关闭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
作为参数,是否属实,在完全关闭之前一切都已完成?
因此,当我想关闭我的应用程序和它的所有线程时,我必须手动将每个属性设置为'isBackground'?没有其他办法了? – Joetjah 2013-02-27 10:17:51
您不能将现有的线程作为后台线程。它必须在启动之前设置。你现在怎么创建你的线程?如果您使用线程池方法,则可以将它们全部默认为后台线程。如果他们长时间运行(这可能是保持应用程序活跃的更可能的原因),那么我们大概有多少人在谈论? – JRoughan 2013-02-27 22:20:47
我在很多地方都有线程运行,我在通过整个解决方案进行搜索时会注意到。我将不得不将它们全部改写为Backgroudn线程。这将如何影响我的表现?我认为我的问题尽可能回答,谢谢。 – Joetjah 2013-02-28 08:35:35