不能隐式转换IAsyncOperationStorageFile
本文关键字:StorageFile IAsyncOperation 转换 不能 | 更新日期: 2023-09-27 18:13:09
我的代码到底出了什么问题?
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' to 'Windows.Storage.StorageFile'
如果我添加'await',就像在代码上注释一样,我得到以下错误:
¹'await'操作符只能在async方法中使用。考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task'。
源代码在这里
好吧,你的代码不能编译的原因是由编译器错误消息直接解释的。FileOpenPicker.PickSingleFileAsync
返回一个IAsyncOperation<StorageFile>
,所以不,你不能把返回值赋给一个StorageFile
变量。在c#中使用IAsyncOperation<>
的典型方法是使用await
。
你只能在async
方法中使用await
…所以你可能想把你的方法改成异步的:
private async void BrowseButton_Click(object sender, RoutedEventArgs e)
{
...
StorageFile file = await FilePicker.PickSingleFileAsync();
...
}
请注意,对于事件处理程序以外的任何事情,最好让异步方法返回Task
而不是void
-使用void
的能力实际上只是为了可以使用异步方法作为事件处理程序。
如果你还不太熟悉async
/await
,你应该在进一步学习之前先阅读一下——MSDN的"异步编程与async和await"页面可能是一个不错的起点。