2013-09-02 2 views
0

Когда я пытаюсь сделать это:Как сохранить папку из FolderPicker в StorageFolder?

 folderPicker = new FolderPicker(); 
     folderPicker.SuggestedStartLocation = PickerLocationId.Desktop; 
     folderPicker.FileTypeFilter.Add(".txt"); 
     StorageFolder folder = await folderPicker.PickSingleFolderAsync(); 

это показывает мне ошибку:

Error 2 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'. C:\Users\Lukasz\Documents\Visual Studio 2012\Projects\RobimyProjekt\RobimyProjekt\ImageBrowser.xaml.cs.

Когда я удалил "ждать" он показал мне другую ошибку:

Error 2 Cannot implicitly convert type 'Windows.Foundation.IAsyncOperation' to 'Windows.Storage.StorageFolder' C:\Users\Lukasz\Documents\Visual Studio 2012\Projects\RobimyProjekt\RobimyProjekt\ImageBrowser.xaml.cs 61 36 RobimyProjekt.

Что происходит ? Этот код из msdna и я с помощью Visual Studio 2012.

+0

Как ваша функция (которая содержит этот код) определяется? – RvdK

+0

private void pickFolder (отправитель объекта, RoutedEventArgs e) { // код из предыдущего сообщения } –

ответ

0

изменить его

private async void (pickFolder(object sender, RoutedEventArgs e) 
1

Попробуйте это. Вы должны использовать ключевое слово async для ожидания.

private async void pickFolder(object sender, RoutedEventArgs e) 
{ 
    folderPicker = new FolderPicker(); 
    folderPicker.SuggestedStartLocation = PickerLocationId.Desktop; 
    folderPicker.ViewMode = PickerViewMode.List; 
    folderPicker.FileTypeFilter.Add(".txt"); 
    StorageFolder folder = await folderPicker.PickSingleFolderAsync(); 
    if(folder != null) 
    { 
     StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); 
    } 

}

0

Слушая советы в сообщении об ошибке также может быть хорошей идеей:

Consider marking this method with the 'async' modifier and changing its return type to 'Task'.

Task возвращаемый тип делает метод "awaitable".

Решение void, как предложено в других ответах, также работает, но дает «огонь & забыть». Рекомендуемая практика заключается в том, чтобы фактически вернуть Task, чтобы, если вызывающий объект хочет что-то сделать, например, исключения, полученные в результате вашего метода, это возможно.

Цитирую http://msdn.microsoft.com/en-us/magazine/jj991977.aspx:

"To summarize this first guideline, you should prefer async Task to async void. Async Task methods enable easier error-handling, composability and testability."

Смежные вопросы