single.php

C# WinUI3でFileOpenPickerで例外[Invalid window handle]が発生する場合の対処法

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで[開く]画面を表示する[FileOpenPicker]で例外[System.Runtime.InteropServices.COMException: Invalid window handle]エラーが表示される場合の対処法です。

[Invalid window handle]エラー

例えば[FileOpenPicker]で[ファイルを開く]画面を表示するコードを実行します。

var picker = new Windows.Storage.Pickers.FileOpenPicker();

picker.FileTypeFilter.Add(".m4a");
StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
  //ファイルを選択した後の処理
}

実行時に[System.Runtime.InteropServices.COMException: Invalid window handle]エラーが発生する場合があります。

親ウィンドウのハンドルを指定

[フォルダーを開く]画面を表示する[FolderOpenPicker]や[名前を付けて保存]画面を表示する[FileSavePicker]でも同様ですが、画面を表示するメソッドを利用する前にウィンドウのハンドル指定が必要です。

具体的には、[WinRT.Interop.WindowNative.GetWindowHandle]で取得したハンドルを利用します。

IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker();
InitializeWithWindow.Initialize(picker, hWnd);
StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
  //ファイルを選択した後の処理
}

まとめ

今回は、WinUI3プロジェクトで[ファイルを開く]画面を表示する[FileOpenPicker]で例外[System.Runtime.InteropServices.COMException: Invalid window handle]エラーが表示される場合の対処法について紹介しました。

WinUI3では[開く]画面の他に[名前を付けて保存]や[フォルダーを開く]画面などを表示するメソッドを利用する前に親ウィンドウのハンドルを指定する必要があります。

そのためウィンドウのハンドルが指定されていない場合に[Invalid window handle]エラーが表示されます。

WinUI 3で[開く]画面を表示する際に例外が発生する人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です