Строка Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
метода MyPickFolderAsync()
, приведенного ниже, должна позволить мне выбрать папку из папки Downloads
по умолчанию, но после ее открытия диалоговое окно открытия папки Windows (в папке Downloads
) диалоговое окно зависает(зависает), и я не могу выбрать подпапку из папки Downloads
.Я видел подобные проблемы онлайн (такие как это и это ), но эти проблемы, похоже, связаны с более старыми версиями Windows 10
, тогда как;Я подаю в суд на последнюю версию 1809
.
Итак, что я могу упустить здесь и как мы можем ее решить?Эта проблема, похоже, связана со мной, неправильно использующим async/await
.Я пробовал различные варианты использования async/await
, но пока безуспешно.Кто-то с лучшим пониманием использования асинхронных методов может помочь лучше.
Процесс выглядит следующим образом: Я нажимаю кнопку BtnTest
, которая вызывает TestAsync()
, что, в свою очередь, вызывает MyPickFolderAsync()
.Я использую VS2019
на Windows10-ver 1809
private async void BtnTest_Click(object sender, RoutedEventArgs e)
{
await TestAsync();
}
private async Task TestAsync()
{
Task<StorageFolder> pickedFolder = MyPickFolderAsync();
await MyTestAsync(...); //this method does something with pickedFolder folder but that is not relevant to this post since we don't even get to this line in debug mode as the Windows dialog hangs before we get to this line
}
private async Task<StorageFolder> MyPickFolderAsync()
{
Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Downloads;
folderPicker.FileTypeFilter.Add("*");
Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
// Application now has read/write access to all contents in the picked folder (including other sub-folder contents)
Windows.Storage.AccessCache.StorageApplicationPermissions.
FutureAccessList.AddOrReplace("PickedFolderToken", folder);
//this.textBlock.Text = "Picked folder: " + folder.Name;
}
else
{
//this.textBlock.Text = "Operation cancelled.";
}
return folder;
}