C # -UWP FolderPicker зависает на FolderOpenDialog Windows 10 - PullRequest
1 голос
/ 09 июня 2019

Строка 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;
}

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Во-первых, спасибо пользователю Eldho , который помог мне решить проблему, и мы должны give credit where credit's due.

Однако, в интересах некоторых других читателей этого поста «стоит» упомянуть, что я получал следующую ошибку, когда использовал await в следующей строке кода метода TestAsync() (который имел исправляется):

Task<StorageFolder> pickedFolder = MyPickFolderAsync();

Когда я использовал await в приведенном выше вызове, я получил следующую ошибку:

enter image description here

Итак, после прочтения ответа пользователя @Eldho мне пришлось удалить Task<...> из приведенной выше строки кода и добавить await к этой строке (спасибо @Eldho).

0 голосов
/ 09 июня 2019

public IAsyncOperation<StorageFolder> PickSingleFolderAsync()
После успешного вызова этого метода возвращается объект storageFolder, представляющий папку, выбранную пользователем.

Если пользователь отменит операцию, вы получите ErrorCode, Status, как только задача будет завершена.

Поскольку вы никогда не await the MyPickFolderAsync(), задача застряла в приостановленном состоянии и не может выполнить ее.

private async Task TestAsync()
{
     var pickedFolder = await MyPickFolderAsync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...