Application.Current.Shutdownは()しません
-
18-09-2019 - |
質問
タイトルのそれについて。 IPCのためのいくつかのWCFのものとWPFアプリ。私はApplication.Current.Shutdown()
を呼び出し、アプリが喜んで続きます。私はShutdown
が止められないことになっていたと思った。
おそらくそれは、バックグラウンドスレッドから呼び出されていますので、?私はいくつかのディスパッチャあいを行う必要がありますか?
解決
Application.Current.Shutdown
を呼び出したときにあなたは例外を取得するので、すでに適切に「いじるディスパッチャ」を使用したところ、私はあなたを取ると思います。
:ディスパッチャビットは、あなたがそれをスリング可能性が持っているもののように見えないので、もしいずれにせよ、これは、アプリケーションをコンパイルし、終了します
ThreadStart ts = delegate()
{
Dispatcher.BeginInvoke((Action)delegate()
{
Application.Current.Shutdown();
});
};
Thread t = new Thread(ts);
t.Start();
他のヒント
私の経験では、すべてのスレッドが明示的に終了するか、クローズするアプリケーションのために、バックグラウンドスレッドとしてマークされています。
ここでは、バックグラウンドのリードスレッドをキックオフの例である:
_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();
IsBackground
プロパティが鍵となります。それが設定されるものではないが、スレッドはあなたがシャットダウンを呼び出したときに終了しません。
私は唯一の私は、Visual Studioから実行しているときに動作していないApplication.Current.Shutdown
を体験します。 Visual Studioの内で(私が使用している、少なくとも2010年版)Application.Current.Shutdown
は事をしていません。私はそれを介してステップを選抜した場合、この行を実行し、その後続けています。私は、Windowsエクスプローラからファイル(.exeなど)のプログラムを実行すると、その後Application.Current.Shutdown
は正常に動作します。
他のスレッドをデバッグ時に有効ですが、私はそれを説明することはできませんので、これについての説明は、おそらくあります。