FolderPicker мгновенно закрывается без причины - PullRequest
2 голосов
/ 26 апреля 2019

Я использую этот код, чтобы выбрать папку, и он отлично работает.

FolderPicker folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");
StorageFolder pickedFolder = await folderPicker.PickSingleFolderAsync();

Но когда я использую его в определенной функции, я не знаю, почему он вдруг победил 'больше не работает.

Итак, именно это я и делаю: от нажатия кнопки до всплывающего окна FolderPicker.

Нажатие кнопки:

private async void BRechercherPoste_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    if (tbCodePoste != null && !tbCodePoste.Text.Equals(""))
    {
        string codePoste = tbCodePoste.Text;

        //recuperation des infos du poste
        await ViewModel.getPosteInformationsAsync(codePoste);
    }
}

... затем ViewModel.getPosteInformationsAsync:

public async Task getPosteInformationsAsync(string posteNumber)
{
    ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

    await setupFiles();

    [some code not interferring here]
}

... setupFiles:

public static async Task setupFiles()
{
    //checks for the first time app launch 
    if (!await checkIfPosteFolderPresentAsync())
    {}
        PosteChoiceDialog dialogChoice = new PosteChoiceDialog();
        //showing a dialog with 2 choices
        await dialogChoice.ShowAsync();
    }

    [rest of the code (working)]
}

Таким образом, диалоговое окно показывает 2 варианта, один из которых загружает данные по умолчанию в LocalFolder, а второй позволяет вам выбрать персональныйпапка для загрузки данных в LocalFolder.

Функция, которая срабатывает при выборе 2-го варианта, является следующей:

public static async Task loadCustomPosteInformation()
{
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;

    FolderPicker folderPicker = new FolderPicker();
    folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
    folderPicker.FileTypeFilter.Add("*");
    //---Here the folder picker open and closes instantly for no reason---//
    StorageFolder pickedFolder = await folderPicker.PickSingleFolderAsync();
    //--------------------------------------------------------------------//

    //Because it's not working the rest of the function crashes
    if (pickedFolder == null)
    {
        await loadDefaultPosteInformation();
    }
    else
    {
        var files = await pickedFolder.GetFilesAsync();
        StorageFolder postes = await localFolder.CreateFolderAsync("Postes");

        foreach (StorageFile f in files)
        {
            await f.CopyAsync(postes);
        }
    }
}

Поэтому я детализировал все, что мог, потому что искалнесколько часов, почему он зависал, и я действительно не понимаю, почему FolderPicker мгновенно закрывается только в этой конкретной функции.

1 Ответ

1 голос
/ 26 апреля 2019

Это может быть как-то связано с тем, что вызов PickSingleFolderAsync() не находится в потоке пользовательского интерфейса, хотя, если бы это было так, я не знаю, почему он вообще открылся (и закрылся).

Тем не менее, почему бы вам не попробовать позвонить StorageFolder.PickSingleFolderAsync() из потока пользовательского интерфейса:

StorageFolder pickedFolder;
var completionSource = new TaskCompletionSource<StorageFolder>();
var folderDialogTask = completionSource.Task;
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.High,
async () =>
{
      var folder = await folderPicker.PickSingleFolderAsync();
      completionSource.SetResult(folder);
});`
pickedFolder = await folderDialogTask;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...