実現したいこと
C#、UWPにて、セカンダリウィンドウを生成&閉じるを繰り返すプログラムを作りたい。
前提
ループイベント内にてある条件でのトリガーをもとにセカンダリウィンドウを生成し、同じく生成ウィンドウを閉じるという処理を繰り返すプログラムの部分を作成しています。
(Windows.UI.WindowManagement.AppWindowクラスを利用)
同時に存在する生成ウィンドウは1つまでとします。
「生成→閉じる」の一巡目はうまくいきますが、
「生成→閉じる→生成」となる際にTryShowAsyncで例外エラー"要素が見つかりません"とメッセージが出ます。①
また、「生成→閉じる→閉じる」で処理が走るパターン時にCloseAsyncで例外エラー"appWindow が null でした"とメッセージが出ます。②
この現象の解決方法を教えていただけないでしょうか?
エラーメッセージ
エラーメッセージ① ------------------------------- System.Exception HResult=0x80070490 Message=要素が見つかりません。 (Exception from HRESULT: 0x80070490) Source=<例外のソースを評価できません> スタック トレース: <例外のスタック トレースを評価できません> ------------------------------- エラーメッセージ② ------------------------------- System.NullReferenceException HResult=0x80004003 Message=Object reference not set to an instance of an object. Source=sensor_uwp23 スタック トレース: -------------------------------
該当のソースコード
C#
1 /// <summary> 2 /// セカンダリウィンドウの生成 3 /// </summary> 4 private async void ShowCoverWindow() 5 { 6 // 呼び出しウィンドウを全画面モードで表示する 7 ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen; 8 9 // 新規ウィンドウを生成 10 if (!blnCovered) 11 { 12 // インスタンス作成 13 appWindow = await AppWindow.TryCreateAsync(); 14 // ウィンドウコンテンツを作成 15 appWindowFrame = new Frame(); 16 // ウィンドウを閉じるときに参照とXAMLリソースを解放 17 appWindow.Closed += delegate { appWindow = null; appWindowFrame.Content = null; }; 18 // 新規ウィンドウに表示するページにフレーム移動とパラメータ受け渡し 19 appWindowFrame.Navigate(typeof(Cover), val); 20 // XAMLコンテンツをappWindowに接続 21 ElementCompositionPreview.SetAppWindowContent(appWindow, appWindowFrame); 22 // 新規ウィンドウ生成済みフラグ 23 blnCovered = true; 24 } 25 26 // ウィンドウ表示 27 if (blnCovered) 28 { 29 await appWindow.TryShowAsync(); // ⇒⇒2巡目走る際、エラー発生① 30 Window.Current.Activate(); 31 } 32 33 } 34 35 /// <summary> 36 /// セカンダリウィンドウ閉じる 37 /// </summary> 38 private async void CloseCoverWindow() 39 { 40 // ウィンドウ生成状態を確認して実行 41 if (blnCovered) 42 { 43 await Task.Delay(2000); 44 // ウィンドウを閉じる 45 await appWindow.CloseAsync(); // ⇒⇒2巡目走る際、エラー発生② 46 47 // フラグを戻す 48 blnCovered = false; 49 50 } 51 }
バージョン
visual studio 2022

回答1件
あなたの回答
tips
プレビュー