[UWP]セカンダリウィンドウを生成&閉じるを繰り返すプログラムにて、2巡目にエラー(AppWindowクラス)
Q&A
Closed
解決したいこと
VisualStudio2022の環境で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
スタック トレース:
該当サンプルコード
/// <summary>
/// セカンダリウィンドウの生成
/// </summary>
private async void ShowCoverWindow()
{
// 呼び出しウィンドウを全画面モードで表示する
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
// 新規ウィンドウを生成
if (!blnCovered)
{
// インスタンス作成
appWindow = await AppWindow.TryCreateAsync();
// ウィンドウコンテンツを作成
appWindowFrame = new Frame();
// ウィンドウを閉じるときに参照とXAMLリソースを解放
appWindow.Closed += delegate { appWindow = null; appWindowFrame.Content = null; };
// 新規ウィンドウに表示するページにフレーム移動とパラメータ受け渡し
appWindowFrame.Navigate(typeof(Cover), val);
// XAMLコンテンツをappWindowに接続
ElementCompositionPreview.SetAppWindowContent(appWindow, appWindowFrame);
// 新規ウィンドウ生成済みフラグ
blnCovered = true;
}
// ウィンドウ表示
if (blnCovered)
{
await appWindow.TryShowAsync(); // ⇒⇒2巡目走る際、エラー発生①
Window.Current.Activate();
}
}
/// <summary>
/// セカンダリウィンドウ閉じる
/// </summary>
private async void CloseCoverWindow()
{
// ウィンドウ生成状態を確認して実行
if (blnCovered)
{
await Task.Delay(2000);
// ウィンドウを閉じる
await appWindow.CloseAsync(); // ⇒⇒2巡目走る際、エラー発生②
// フラグを戻す
blnCovered = false;
}
}
0 likes