4

私のコードの何が問題なのですか?

    private void BrowseButton_Click(object sender, RoutedEventArgs e)
    {
        FileOpenPicker FilePicker = new FileOpenPicker();
        FilePicker.FileTypeFilter.Add(".exe");
        FilePicker.ViewMode = PickerViewMode.List;
        FilePicker.SuggestedStartLocation = PickerLocationId.Desktop;
        // IF I PUT AWAIT HERE   V     I GET ANOTHER ERROR¹
        StorageFile file = FilePicker.PickSingleFileAsync();
        if (file != null)
        {
            AppPath.Text = file.Name;
        }
        else
        {
            AppPath.Text = "";
        }         
    }

それは私にこのエラーを与えます:

タイプ 'Windows.Foundation.IAsyncOperation' を 'Windows.Storage.StorageFile' に暗黙的に変換することはできません

コードにコメントされているように、「待機」を追加すると、次のエラーが発生します。

¹ 「await」演算子は、非同期メソッド内でのみ使用できます。このメソッドを「async」修飾子でマークし、戻り値の型を「Task」に変更することを検討してください。

コードソースはこちら

4

1 に答える 1

5

コードがコンパイルされない理由は、コンパイラのエラー メッセージによってかなり直接的に説明されます。FileOpenPicker.PickSingleFileAsync- を返すので、その戻り値を変数IAsyncOperation<StorageFile>に割り当てることはできません。C# でStorageFileの典型的な使用方法は withです。IAsyncOperation<>await

awaitメソッド内でのみ使用できasyncます...そのため、おそらくメソッドを非同期に変更する必要があります。

private async void BrowseButton_Click(object sender, RoutedEventArgs e)
{
    ...
    StorageFile file = await FilePicker.PickSingleFileAsync();
    ...
}

イベント ハンドラー以外の場合は、非同期メソッドを返すTaskよりもむしろ、非同期メソッドをイベント ハンドラーとして使用できるようにするためだけvoidに使用することをお勧めします。void

async/にあまり慣れていない場合はawait、先に進む前によく読んでおく必要があります。MSDN の「async と await を使用した非同期プログラミング」ページは、適切な出発点になるでしょう。

于 2013-05-12T21:48:06.780 に答える