2017-07-24 7 views
0

Est-ce que quelqu'un sait ce que je fais mal avec cela.UWP, C++/Cx FileOpenPicker

// STORAGE FILE 
    StorageFile^ saveFile; 

    // FILE PICKER, FOR SELECTING A SAVE FILE 
    FileOpenPicker^ filePicker = ref new FileOpenPicker; 

    // ARRAY OF FILE TYPES 
    Array<String^>^ fileTypes = ref new Array<String^>(1); 
    fileTypes->Data[0] = ".txt"; 

    filePicker->ViewMode = PickerViewMode::Thumbnail; 
    filePicker->SuggestedStartLocation = PickerLocationId::Desktop; 
    filePicker->FileTypeFilter->ReplaceAll(fileTypes); 

    // THIS SHOULD HOPEFULLY LET US PICK A FILE 

    saveFile = filePicker->PickSingleFileAsync(); 

spécifiquement la dernière ligne:

saveFile = filePicker->PickSingleFileAsync(); 

Je reçois l'erreur suivante.

erreur C2440: '=': ne peut pas convertir 'de Windows :: Foundation :: IAsyncOperation ^' à 'de Windows Storage :: StorageFile ^'

+2

Vous devez attendre une opération asynchrone. Utilisez create_task() ou le mot clé d'extension co_await. Beaucoup d'exemples de code là-bas. –

+1

Vous pouvez également ajouter le type de fichier au vecteur existant - vous n'avez pas besoin de remplacer le contenu par votre propre tableau. –

Répondre

0

erreur C2440: « = « : ne peut pas convertir 'de Windows :: Foundation :: IAsyncOperation ^' à 'Windows Storage :: StorageFile ^'

PickSingleFileAsync est méthode asynchrone, et le type de retour est Windows::Foundation::IAsyncOperation, il ne peut pas être convertir au type StorageFile. Comme l'a dit Hans Passant, vous pouvez utiliser create_task() pour attendre cette opération asynchrone.

create_task(folderPicker->PickSingleFolderAsync()).then([this](StorageFolder^ folder) 
{ 
    if (folder) 
    { 
     //do some stuff 
    } 
    else 
    { 
     //do some stuff 
    } 
}); 

Pour plus d'informations, veuillez vous reporter à Asynchronous programming in C++.