Window.VisibilityとWindow.Hide()の違いについて

前提

WPF(.NetFramework4.8)でタスクに常駐するようなアプリケーションを作っています。

発生している問題・エラーメッセージ

下記の手順を行うと、画面が真っ暗になるという現象が起きてしまいます。

  1. アプリケーションを起動する
  2. タイトルバー右側の「バツ」ボタンからGUIを閉じる
  3. タスクトレイに該当のアプリケーションが存在していることを目視で確認する
  4. 3の環境に対して別の環境からRDP接続を行う
  5. 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.VisibilityWindow.Hide()の違いを知りたいです。
MSのドキュメントを見る限り、Visibilityを使う方が邪道な気もしなくはないですが...。
もし参考になる情報があれば教えていただきたいです。

コメントを投稿

0 コメント