前提
WPF(.NetFramework4.8)でタスクに常駐するようなアプリケーションを作っています。
発生している問題・エラーメッセージ
下記の手順を行うと、画面が真っ暗になるという現象が起きてしまいます。
- アプリケーションを起動する
- タイトルバー右側の「バツ」ボタンからGUIを閉じる
- タスクトレイに該当のアプリケーションが存在していることを目視で確認する
- 3の環境に対して別の環境からRDP接続を行う
- 4の環境でタスクトレイから該当のアプリケーションを起動する
正常に動作するソースコード
ソースコードはこちらと全く同じです。
ただしこちらのソースコードはRDP接続しても問題なく画面が表示されます。
再現するソースコード
ShowMainWindow
メソッドを下記に変更した上でビルド・上記の手順を行うと、それなりの確率で再現率で画面が真っ暗になります。
C#
1 private void ShowMainWindow()2 {3 if (_win == null)4 {5 _win = new MainWindow();6 7 //ウィンドウを画面中央に表示8 _win.WindowStartupLocation = WindowStartupLocation.CenterScreen;9 10 //Windowsを表示する11 _win.Show();12 13 //閉じるボタンが押された時のイベント処理を登録14 _win.Closing += (s, e) =>15 {16 //_win.Hide(); //非表示にする17 _win.Visibility = Visibility.Collapsed; //ここを追加18 e.Cancel = true; //閉じるをキャンセルする19 };20 }21 else22 {23 //Windowsを表示する24 _win.Visibility = Visibility.Visible; //ここを追加25 _win.Show();26 }27 }
質問
現象は解決したのですが、なぜVisibility
の上書きだと問題が起きるのか理解できておらずWindow.Visibility
とWindow.Hide()
の違いを知りたいです。
MSのドキュメントを見る限り、Visibility
を使う方が邪道な気もしなくはないですが...。
もし参考になる情報があれば教えていただきたいです。
0 コメント