2017-02-02 6 views
0

Я верю, что в реализации FolderPicker.PickSingleFolderAsync есть ошибка в мобильном телефоне Windows 10: вызов этой функции вызывает некоторую ошибку и останавливает нормальный поток выполнения кода.У кого-либо еще проблемы с FolderPicker.PickSingleFolderAsync на мобильном?

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

Рассмотрим следующий код:

public async Task<bool> UserSelectFolderAsync() 
{ 
    var picker = new FolderPicker(); 
    picker.SuggestedStartLocation = PickerLocationId.Desktop; 
    picker.FileTypeFilter.Add("."); 

    await ShowDialogAsync("Picking folder"); 
    var folder = await picker.PickSingleFolderAsync(); 
    await ShowDialogAsync("Picked folder"); 

    if (folder == null) 
     return false; 

    StorageApplicationPermissions.FutureAccessList.Clear(); 
    selectedFolder = folder; 
    StorageApplicationPermissions.FutureAccessList.Add(selectedFolder); 

    return true; 
} 

private async Task ShowDialogAsync(string message) 
{ 
    MessageDialog showDialog = new MessageDialog(message); 
    await showDialog.ShowAsync(); 
} 

Update

Я исследовал этот вопрос дальше, и я считаю, что это вызвано приложение приостанавливается, пока пользователь взаимодействует с подборщика файла ,

На мобильном телефоне, вызывая средство выбора, открывает другое приложение, проводник и устанавливает его на переднем плане с обычными последствиями с точки зрения жизненного цикла приложения. Я был в состоянии достаточно надежно воспроизвести проблему на эмуляторе с отладчиком, придаваемом:

  1. Открытие файла сборщика
  2. Переход к местоположению: onless я нажимаю на устройстве или SD карту в самой первой странице подборщика сборщик не кажется, взять на себя, как на переднем плане приложение
  3. Приостановка приложение: от «Debug Location» панели инструментов нажмите кнопку приостановить
  4. Подтверждение выбора в палитре

в м в любых случаях это приводит к тому, что какой-либо код следует за кодом

await picker.PickSingleFolderAsync(); 

заявление не исполняется.

К сожалению, в то время как на Windows Phone 8 способ борьбы с подборщиком означал использование

picker.PickFolderAndContinue(); 

и явно имеет дело с приложением подвеской, делая так больше не возможно на Windows 10: вызов вышеупомянутого метода бросает исключение ,

+0

Есть ли у вас что-то в * Приостановление * или * Вводные события (возобновление и уход)? – Romasz

+0

Нет, у меня там ничего нет – Alberto

+0

Я тестировал ваш код, но не могу воспроизвести вашу проблему.Вы тестировали в реальном устройстве? В Windows 10 поведение «FolderPicker» отличается от поведения в Windows 8.1. Нет необходимости использовать метод 'PickFolderAndContinue'. – Scavenger

ответ

0

Оказывается, этот вопрос вызывал

SuspendingOperation.GetDeferral(); 

в OnSuspending случае, когда приложение было приостановлено из-за сборщик файла захвата.

Это даже если

SusendingDeferral.Complete(); 

не был вызван сразу же после этого (не ожидание операции для завершения).

Обеспечение отсрочки не требуется, когда приложение приостанавливается из-за выбора файла, было достаточно, чтобы остановить проблему.

Смежные вопросы