[解決済み] メインウィンドウを閉じてもWPFアプリがシャットダウンしない
質問
私はVisual StudioでWinFormsのプログラミングに慣れていますが、WPFを試してみたくなりました。
私は自分のプロジェクトにWindow01という別のウィンドウを追加しました。メインウィンドウは MainWindow と呼ばれます。の前に
public MainWindow()
コンストラクタの前に Window01 を宣言しています。
Window01 w1;
さて、このウィンドウをインスタンス化すると
private void Window_Loaded(object sender, RoutedEventArgs e)
{
w1 = new Window01();
}
ウィンドウが表示されるボタンがあります。
w1.ShowDialog();
.
ここで「おかしい」のは、アプリケーションを (デバッグ付きで) 起動し、数秒後に終了した場合 (私はアプリケーションで何もしていません)、Visual Studio はアプリケーションがまだ実行されているかのようにデバッグを停止しない、という事実です。
私が行を移動すると
w1 = new Window01();
のすぐ上、つまりボタンのクリックメソッドに移動すると
ShowDialog()
を追加すると、Visual Studio は適切に動作します。つまり、アプリケーションを終了すると、デバッグが停止します。
なぜこのような奇妙な動作になるのでしょうか。
どのように解決するのですか?
あなたの
MainWindow.xaml.cs
で、これを実行してみてください。
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
Application.Current.Shutdown();
}
このリンク先では
ShutdownMode
をXAMLで設定することができます。
http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
ShutdownMode="OnExplicitShutdown"
>
</Application>
アプリケーションの実行を停止するのは
Shutdown
メソッドの
Application
メソッドが呼び出されます。シャットダウンは暗黙的または明示的に行われ、それは
ShutdownMode
プロパティの値によって指定されます。
もしあなたが
ShutdownMode
から
OnLastWindowClose
Windows Presentation Foundation (WPF) は、アプリケーションの最後のウィンドウが閉じると、現在インスタンス化されているウィンドウがメイン ウィンドウとして設定されていても (MainWindow 参照)、暗黙のうちに Shutdown を呼び出すようになっています。
A
ShutdownMode
の
OnMainWindowClose
を使用すると、他のウィンドウが現在開いている場合でも、MainWindow が閉じるときに WPF が暗黙的に Shutdown を呼び出すようになります。
一部のアプリケーションの寿命は、メインウィンドウまたは最後のウィンドウがいつ閉じられるかに依存しないか、またはウィンドウにまったく依存しない場合があります。このようなシナリオの場合は
ShutdownMode
プロパティに
OnExplicitShutdown
のように、明示的な
Shutdown
メソッド呼び出しが必要です。そうでなければ、アプリケーションはバックグラウンドで実行され続けます。
ShutdownMode
は、XAML から宣言的に、またはコードからプログラム的に設定することができます。
このプロパティは
Application
オブジェクトを作成したスレッドからのみ利用可能です。
あなたの場合、アプリが終了しないのは、おそらくデフォルトの
OnLastWindowClose
:
もし
ShutdownMode
から
OnLastWindowClose
に設定されている場合でも、WPF はアプリケーションの最後のウィンドウが閉じると、暗黙のうちに Shutdown を呼び出します。
MainWindow
).
新しいウィンドウを開いていて、閉じていないので、シャットダウンは呼び出されません。
関連
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】WebResource.axdとは何ですか?