2017-02-02 7 views
0

Windows PhoneでFolderPicker.PickSingleFolderAsyncの実装にバグがあると思います。その関数を呼び出すと何らかのエラーが発生したように見え、通常のコード実行フローが停止します。モバイルで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(); 
} 

は、次のコードを考えてみましょう。

モバイルでは、ピッカーを呼び出すと、別のアプリを開き、ファイルエクスプローラを開き、フォアグラウンドで設定することをアプリライフサイクルの観点から通常の意味で行います。

  1. 場所への移動、ファイルピッカー
  2. を開く:私は非常に最初のピッカーページでデバイスやSDカードをクリックonless私はかなり確実で取り付けデバッガとエミュレータ上で問題を再現することができましたピッカーは、アプリを中断フォアグラウンドアプリ
  3. として引き継ぐように思えません:「デバッグ場所」ツールバーからクリックします一時停止ボタン
  4. ピッカーメートルで

での選択を確認しますどんな場合でも、これはどんなコードが続くかにかかわらず、

await picker.PickSingleFolderAsync(); 

ステートメントを実行しません。

のWindows Phone 8にピッカーに対処する方法は、アプリのサスペンションを扱う

picker.PickFolderAndContinue(); 

と明示的に使用して意味残念ながら、そうすることのWindows 10上ではもはや不可能である:上記のメソッドを呼び出すと例外がスローされます。

+0

* Suspending *または* EnteringBackground *(再開と離脱)のイベントがありますか? – Romasz

+0

いいえ、私は何もありません – Alberto

+0

私はあなたのコードでテストしましたが、問題を再現できません。実際のデバイスでテストしましたか? Windows 10では、 'FolderPicker'の動作はWindows 8.1の動作と異なります。 'PickFolderAndContinue'メソッドを使う必要はありません。 – Scavenger

答えて

0

は、アプリがファイルピッカーに引き継ぐため中断されたときに問題が、OnSuspendingイベントで

SuspendingOperation.GetDeferral(); 

を呼んでいたが判明します。

これさえ

SusendingDeferral.Complete(); 

場合は、(操作が完了するのを待っているなし)直後に呼ばれませんでした。

ファイルピッカーのためにアプリケーションが中断したときに延期が要求されないようにすることで、問題を停止させることができました。

関連する問題