Что, черт возьми, не так с моим кодом?
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.
Источник кода здесь
1 ответ
Что ж, причина того, что ваш код не компилируется, довольно прямо объясняется сообщением об ошибке компилятора. FileOpenPicker.PickSingleFileAsync
возвращает IAsyncOperation<StorageFile>
- так что нет, вы не можете присвоить это возвращаемое значение переменной StorageFile
. Типичный способ использования IAsyncOperation<>
в C # - await
.
Вы можете использовать только await
в методах async
... так что вы, вероятно, захотите изменить свой метод на асинхронный:
private async void BrowseButton_Click(object sender, RoutedEventArgs e)
{
...
StorageFile file = await FilePicker.PickSingleFileAsync();
...
}
Обратите внимание, что для чего-либо, кроме обработчиков событий, лучше сделать так, чтобы асинхронный метод возвращал Task
, а не void
- возможность использовать void
действительно только для того, чтобы вы могли em> используйте асинхронный метод в качестве обработчика событий.
Если вы еще не совсем знакомы с async
/ await
, вам, вероятно, следует прочитать об этом, прежде чем идти дальше - Страница MSDN" Асинхронное программирование с помощью async и await ", вероятно, является хорошей отправной точкой.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.