2017-02-02 1 views
0

Je crois qu'il y a un bug dans l'implémentation de FolderPicker.PickSingleFolderAsync sur Windows 10 mobile: l'appel de cette fonction semble provoquer une erreur quelconque et arrête le flux d'exécution de code normal. Cependant, ce qui est exaspérant, c'est que le comportement incorrect ne se produit que lorsque l'application est exécutée sans débogueur, ce qui rend difficile de déterminer exactement ce qui se passe.Quelqu'un d'autre a des problèmes avec FolderPicker.PickSingleFolderAsync sur mobile?

Consultez le code suivant:

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(); 
} 

Mise à jour

J'enquêtait sur la question et je crois que cela est causé par l'application étant suspendue pendant que l'utilisateur interagit avec le sélecteur de fichiers . Sur un mobile, l'appel d'un sélecteur signifie l'ouverture d'une application différente, l'Explorateur de fichiers et la définition de ce dernier en premier plan, avec les implications habituelles en termes de cycle de vie de l'application. Je suis en mesure de reproduire de façon relativement fiable la question de l'émulateur avec débogueur attaché par:

  1. Ouverture du sélecteur de fichiers
  2. Navigation vers un lieu: onless je clique sur le périphérique ou la carte SD dans la première page de sélecteur le sélecteur ne semble pas prendre en charge l'application de premier plan comme
  3. l'application suspendre: de « Debug emplacement » barre d'outils cliquez sur le bouton suspendre
  4. Confirmation de la sélection dans le sélecteur

en m dans tous les cas, cela provoque tout code suit le

await picker.PickSingleFolderAsync(); 

instruction de ne pas exécuter.

Malheureusement, alors que sur Windows Phone 8 la façon de traiter avec sélecteur signifiait à l'aide

picker.PickFolderAndContinue(); 

et de traiter explicitement la suspension de l'application, le faire est plus possible sur Windows 10: appeler la méthode renvoie au-dessus d'une exception .

+0

Avez-vous quelque chose dans * Suspending * ou * EnteringBackground * (reprendre et quitter) des événements? – Romasz

+0

Non, je n'ai rien là – Alberto

+0

J'ai testé avec votre code mais je ne peux pas reproduire votre problème.Avez-vous testé dans un vrai appareil? Dans Windows 10, le comportement de 'FolderPicker' est différent de celui de Windows 8.1. Il n'est pas nécessaire d'utiliser la méthode 'PickFolderAndContinue'. – Scavenger

Répondre

0

Transforme la question appelait

SuspendingOperation.GetDeferral(); 

en cas OnSuspending, lorsque l'application a été suspendue en raison du sélecteur de fichiers prise en charge.

Cette même si

SusendingDeferral.Complete(); 

a été appelé immédiatement après (sans attente pour les opérations à compléter).

S'assurer qu'un report n'est pas demandé lorsque l'application est suspendue à cause du sélecteur de fichier a été suffisant pour arrêter le problème.