3

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

由于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作为论据,一切都在完全关闭之前完成,这是真的吗?

4

1 回答 1

1

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

As for your actual question from what I understand BeginInvokeShutdown will still process everything in the UI thread queue but will not accept any more actions. The priority just seems to be similar to a normal thread priority setting as it relates to CPU usage with the extra ability of ending the invoked task to the front of the processing queue.

于 2013-02-27T09:25:46.163 回答