我的代码到底有什么问题?

    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 = "";
        }
    }

它给了我这个错误:



如果我添加'await',就像在代码上评论的那样,我会收到以下错误:



代码源 here

最佳答案

好吧,编译器错误消息非常直接地解释了您的代码无法编译的原因。 FileOpenPicker.PickSingleFileAsync 返回一个 IAsyncOperation<StorageFile> - 所以不,你不能将该返回值分配给 StorageFile 变量。在 C# 中使用 IAsyncOperation<> 的典型方法是使用 await

您只能在 await 方法中使用 async ......所以您可能希望将您的方法更改为异步:

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

请注意,对于事件处理程序以外的任何内容,最好使异步方法返回 Task 而不是 void - 使用 void 的能力实际上只是为了您可以使用异步方法作为事件处理程序。

如果您还不是很熟悉 async/await,那么您可能应该在继续之前阅读它——MSDN "Asynchronous Programming with async and await" 页面可能是一个不错的起点。

关于c# - 无法将类型 IAsyncOperation<StorageFile> 隐式转换为 StorageFile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16512346/

10-13 03:42