2017-07-24 94 views
0

有沒有人知道我在做什麼錯了。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(); 

特別是最後一行:

saveFile = filePicker->PickSingleFileAsync(); 

我碰到下面的錯誤。

錯誤C2440: '=':「=:無法從 '視窗:基金會:: IAsyncOperation ^' 到 '視窗::存儲:: StorageFile ^'

+2

您必須等待任何異步操作。使用create_task()或co_await擴展關鍵字。很多示例代碼都在那裏。 –

+1

您也可以將文件類型追加到現有的矢量 - 您不必用自己的數組替換內容。 –

回答

0

錯誤C2440轉換視窗:基金會:: IAsyncOperation ^:」不能從轉換'到‘視窗::存儲:: StorageFile ^’

PickSingleFileAsync是異步方法,並返回類型爲Windows::Foundation::IAsyncOperation,它不能被轉換到StorageFile類型。 Hans Passant說,你可以使用create_task()來等待這個異步操作。

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

欲瞭解更多請參閱Asynchronous programming in C++