无法将类型 IAsyncOperation<StorageFile> 隐式转换为 StorageFile
Posted
技术标签:
【中文标题】无法将类型 IAsyncOperation<StorageFile> 隐式转换为 StorageFile【英文标题】:Cannot implicitly convert type IAsyncOperation<StorageFile> to StorageFile 【发布时间】:2013-05-06 21:56:12 【问题描述】:我的代码到底有什么问题?
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',就像对代码的注释一样,我会收到以下错误:
¹ 'await' 运算符只能在异步方法中使用。考虑使用 'async' 修饰符标记此方法并将其返回类型更改为 'Task'。
代码源here
【问题讨论】:
【参考方案1】:好吧,编译器错误消息非常直接地解释了您的代码无法编译的原因。 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 "Asynchronous Programming with async and await" 页面可能是一个不错的起点。
【讨论】:
现在我明白了,非常感谢!我开始学习 C#,这个 async/await 东西对我来说真的很新鲜。非常感谢您的帮助!以上是关于无法将类型 IAsyncOperation<StorageFile> 隐式转换为 StorageFile的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将IAsyncOperation强制为错误状态?
我如何以编程方式将IAsyncOperation强制为错误状态?
有没有办法将 IAsyncOperation 转换为 System.IO.Steam?
升级 Visual Studio 产量 - “IAsyncOperation”:未定义基类和未定义 IID_IAsyncOperation
FromBluetoothAddressAsync IAsyncOperation 不包含“GetAwaiter”错误的定义