がりらぼ

WindowsRuntimeの応援ブログ

ファイルを選択する

WindowsForm時代はOpanFileDialogとかだったのですが
WinRTでファイル選択するにはFileOpenPickerというクラスを使うそうで

private async void AddBookButton_Click(object sender, RoutedEventArgs )
{
            var fileOpenPicker = new FileOpenPicker();

            fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
            fileOpenPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
            fileOpenPicker.FileTypeFilter.Add(".png");
            
            var file = await fileOpenPicker.PickSingleFileAsync();

            if (file != null)
            {
                string result=file.Name;
            }
 }

ViewModeプロパティでサムネイル表示とリスト表示を切り替えれます。
SuggestedStartLocationでスタートディレクトリを指定します。
FileTypeFilterはWinForm時代から大きく変化をとげ、大分書きやすくなりました。
しかしこのフィルターが一つも無いと、なぞにアプリが落ちます。

その後、非同期でファイルを選択するのですがここでasync /awaitの登場です。
WinRTから非同期を簡単化するために導入された修飾詞で、
awaitが来るといったん処理をメソッド呼び出し側に返し、awaitの処理が終了するとそれ以降の処理を実行します。
awaitがあるメソッドには必ずasyncをつける必要があります。
これを知らないとデバッグしてるときとかになぞに処理が飛んで悩みそうです。
ファイルピック処理など、Asyncがつくメソッドにはawaitして非同期にしましょう。