В настоящее время я работаю над приложением для метро, для которого требуется несколько текстовых ресурсов. Частью процесса сборки является копирование всех этих ресурсов в папку внутри каталога установки приложения. Что я хотел бы сделать, так это собрать список этих файлов ресурсов и соответствующим образом обработать каждый из них. К сожалению, мои попытки сделать это не увенчались успехом.
Поскольку я собираю для WinRT, я не могу использовать очень полезные функции «FindFirstFile» и «FindNextFile». Я пытался выполнить работу, используя асинхронные операции ввода-вывода файлов WinRT.
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
}
}
});
}
});
Что не удается скомпилировать:
ошибка C2664: «Windows::Foundation::IAsyncOperation‹TResult>::Completed::set»: невозможно преобразовать параметр 1 из «Windows::Foundation::AsyncOperationCompletedHandler‹TResult> ^» в «Windows::Foundation::AsyncOperationCompletedHandler‹ TРезультат> ^'
Ошибка не имеет для меня никакого смысла. Я попытался переписать приведенный выше код, чтобы функции обработчика лямбда не были встроенными, но это не изменило ситуацию. Я не уверен, что случилось.
Любые идеи? Заранее спасибо.
task<T>и его методthen()вместо того, что вы делаете. Это сделает ваш код короче и понятнее. - person svick   schedule 31.03.2012