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。それらがフォアグラウンド スレッドである必要がある場合は、シャットダウン時にループを手動で停止する必要があります。

私が理解していることからの実際の質問についてBeginInvokeShutdownは、UIスレッドキュー内のすべてを引き続き処理しますが、それ以上のアクションは受け入れません。優先度は、呼び出されたタスクを処理キューの先頭で終了する追加機能を備えた CPU 使用率に関連するため、通常のスレッド優先度設定に似ているようです。

于 2013-02-27T09:25:46.163 に答える