質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

567閲覧

[UWP]セカンダリウィンドウを生成&閉じるを繰り返すプログラムにて、2巡目にエラー(AppWindowクラス)

korochi77

総合スコア1

UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2023/02/27 00:54

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2023/02/27 09:14

[[Q&A] [UWP]セカンダリウィンドウを生成&閉じるを繰り返すプログラムにて、2巡目にエラー(AppWindowクラス) - Qiita](https://qiita.com/saka_3776/questions/a92062de4c1a23f6afc3) > teratailでは、マルチポスト※の推奨はしていません。 > やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。 [ヘルプ|他のサービスにも質問投稿をしたい(してしまった)](https://teratail.com/help#posted-otherservice)
TN8001

2023/02/27 09:15

> 「生成→閉じる→生成」となる際にTryShowAsyncで例外エラー"要素が見つかりません"とメッセージが出ます。① ShowCoverWindow()やCloseCoverWindow()の呼び出し側の記載がないので再現できません。 そもそもなぜ async void なんでしょうか? > また、「生成→閉じる→閉じる」で処理が走るパターン時にCloseAsyncで例外エラー"appWindow が null でした"とメッセージが出ます。② Closedで appWindow = null; としているんですから当然ですよね... 「生成→閉じる→閉じる」とならないようなフローにするとか、nullチェックするとか?
guest

回答1

0

自己解決

質問マルチポスト非推奨のルールを知らず申し訳ありません。
https://qiita.com/saka_3776/questions/a92062de4c1a23f6afc3)

blnCovered を appWindow!=null としてエラーが出ないようになりました。
下手なことをやっていましたが解消されたようです。
ありがとうございました。

投稿2023/03/02 06:06

korochi77

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問