我的代码到底有什么问题?
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/