Ich versuche, die gleiche Struktur von diesem answer zu folgen, um Ausnahmen von asynchronen Aufgaben zu behandeln. In diesem Fall GetFolderAsync
von der FutureAccessList
.Handle GetFolderAsync Ausnahmen
if (Windows::Storage::AccessCache::StorageApplicationPermissions::FutureAccessList->ContainsItem("PickedFolderToken")) {
create_task(Windows::Storage::AccessCache::StorageApplicationPermissions::FutureAccessList->GetFolderAsync("PickedFolderToken")).then([this](StorageFolder^ folder)
{
//do some stuff
auto query = folder->CreateFileQueryWithOptions(Q);
return query->GetFilesAsync();
}).then([this](IVectorView<StorageFile^>^ f)
{
// Process
}).then([this](task<void> t)
{
try
{
t.get();
}
catch (Platform::Exception^ e)
{
// Handle error
txt_currentPath->Text = "FOLDER NOT FOUND";
}
});
}
Aber läuft von VS2015 Debug-Modus mit der folgenden Meldung noch
WinRT Informationen stürzt ab: Die Datei oder einen Ordner mit dem angegebenen Token (PickedFolderToken) nicht gefunden werden kann assoziiert. Möglicherweise wurde die Datei oder der Ordner verschoben oder gelöscht.
Wenn es einen Handler für diese Ausnahme gibt, kann das Programm sicher fortgesetzt werden fortgesetzt.
Wenn ich versuche fortzufahren, wird nur eine Ausnahme ausgelöst. Was vermisse ich?
Update:
mit try
und catch
im folgenden Code Experimenting wirft nach wie vor eine Ausnahme ...
try {
Windows::Storage::AccessCache::StorageApplicationPermissions::FutureAccessList->GetFolderAsync("PickedFolderToken");
}
catch (Exception^ e){
OutputDebugString(L"ERROR");
}
Update2:
Typisches Einsatzszenario:
- Benutzer öffnet die App. Wählt einen Ordner aus, der in der App geöffnet werden soll, z. C: \ Datasets \ set1. Der Pfad wird in FutureAccessList als "PickedFolderToken" gespeichert.
- Der Benutzer beendet und beendet das Programm.
- Später starten sie das Programm erneut und es navigiert automatisch zu dem Ordner, der in der FutureAccessList als "PickedFolderToken" gespeichert ist.
Ausnahmefall:
- Der Ordner "C: \ Datensätze \ set1" wird nun gelöscht oder nicht wurde mehr verfügbar (vielleicht ist es auf eine SD-Karte E hingewiesen: \ Datensätze \ set1) außerhalb der App
- Benutzer starten die App und stürzt < - das ist die Ausnahme ich versuche
if (FutureAccessList->ContainsItem("PickedFolderToken"))
true zurück zu handhaben wie erwartet als der Token-String in den FutureAccessList
noch vorhanden ist. Der Code oben in der Frage fängt nicht die Ausnahme ab, die von GetFolderAsync
ausgelöst wird.
Update3:
Ich habe ein leeres UWP-Projekt den Code in einer minimalen Einstellung und den Code an der Spitze der Post zu testen, funktioniert tatsächlich. Es muss etwas anderes in der Projektkonfiguration geben.
Der Aufruf get() gibt das gewünschte IVectorView zurück. Oder löst die Ausnahme aus. Also sollte die Sekunde dann() nicht da sein. –