Ich arbeite gerade an einer Metro-App, die ein paar textuelle Ressourcen benötigt. Ein Teil des Build-Prozesses kopiert alle diese Ressourcen in einen Ordner innerhalb des Installationsverzeichnisses der App. Ich möchte eine Liste dieser Ressourcendateien sammeln und sie entsprechend bearbeiten. Leider waren meine Versuche weniger erfolgreich.Asynchrone WinRT-Dateioperationen in C++
Da ich für WinRT erstellen, kann ich nicht die sehr nützliche Funktionen "FindFirstFile" und "FindNextFile" verwenden. Ich habe versucht, die Arbeit mit den WinRT Asynchronous File IO-Operationen zu erledigen.
C2664Fehler:
auto getResourceFolder = installedLocation->GetFolderFromPathAsync( folderPath ); getResourceFolder->Completed = ref new Windows::Foundation::AsyncOperationCompletedHandler<Windows::Storage::StorageFolder^>( [this](Windows::Foundation::IAsyncOperation<Windows::Storage::StorageFolder^>^ operation) { if(operation->Status == Windows::Foundation::AsyncStatus::Completed) { auto resourceFolder = operation->GetResults(); auto getResourceFiles = resourceFolder->GetFilesAsync(); getResourceFiles->Completed = ref new Windows::Foundation::AsyncOperationCompletedHandler< IVectorView<Windows::Storage::IStorageFile^>^ >( [this](Windows::Foundation::IAsyncOperation< IVectorView<Windows::Storage::IStorageFile^>^ >^ operation) { if(operation->Status == Windows::Foundation::AsyncStatus::Completed) { auto resourceFiles = operation->GetResults(); for(unsigned int i = 0; i < resourceFiles->Size; ++i) { // Process File } } }); } });
Welche kompilieren schlägt fehl 'Windows :: Foundation :: IAsyncOperation < TResult> :: Abgeschlossen :: set': kann nicht Parameter 1 von ‚Windows-konvertieren :: Foundation :: AsyncOperationCompletedHandler < TResult> ^‘auf 'Windows :: Foundation :: AsyncOperationCompletedHandler < TResult> ^'
Der Fehler keinen Sinn für mich macht. Ich habe versucht, den obigen Code neu zu schreiben, so dass die Lambda-Handler-Funktionen nicht inline sind, aber es hat keinen Unterschied gemacht. Ich bin mir nicht sicher, was los ist.
Irgendwelche Ideen? Danke im Voraus.
Sie sollten wahrscheinlich 'task' und seine 'then()' Methode anstelle von dem, was Sie tun. Es wird Ihren Code kürzer und klarer machen. –
svick
Mit svick einverstanden: ppl ist dein Freund. –