当我尝试这样做时:
folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add(".txt");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
它告诉我错误:
错误2“await”运算符只能在异步方法中使用。 考虑使用'async'修饰符标记此方法并进行更改 它的返回类型为'Task'。 C:\ Users \ Lukasz \ Documents \ Visual Studio 2012 \项目\ RobimyProjekt \ RobimyProjekt \ ImageBrowser.xaml.cs。
当我删除“等待”时,它会显示另一个错误:
错误2无法隐式转换类型 'Windows.Foundation.IAsyncOperation'来 'Windows.Storage.StorageFolder'C:\ Users \ Lukasz \ Documents \ Visual 工作室 2012 \ Projects \ RobimyProjekt \ RobimyProjekt \ ImageBrowser.xaml.cs 61 36 RobimyProjekt。
发生了什么事?该代码来自msdna,我使用Visual Studio 2012。
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
以下内容对我有用。我花了几天的时间才弄清楚。但是,对于我自己的学习项目,我想看看是否可以制作一个文件夹,文件然后从中读取。通过执行以下操作,我能够在指定的路径中创建文件夹。
当然,我正在传递Textbox对象作为参数;但是,无论如何,当我尝试使用FolderPicker
和StorageFolder
创建文件夹时,以下内容对我有用。
public static async Task<string> createDirectory(TextBox parmTextBox)
{
string folderName = parmTextBox.Text.Trim();
// Section: Allows the user to choose their folder.
FolderPicker fpFolder = new FolderPicker();
fpFolder.SuggestedStartLocation = PickerLocationId.Desktop;
fpFolder.ViewMode = PickerViewMode.Thumbnail;
fpFolder.FileTypeFilter.Add("*");
StorageFolder sfFolder = await fpFolder.PickSingleFolderAsync();
if (sfFolder.Name != null)
{
// Gives the StorageFolder permissions to modify files in the specified folder.
Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("CSharp_Temp", sfFolder);
// creates our folder
await sfFolder.CreateFolderAsync(folderName);
// returns a string of our path back to the user
return string.Concat(sfFolder.Path, @"\", folderName);
}
else
{
MessageDialog msg = new MessageDialog("Need to choose a folder.");
await msg.ShowAsync();
return "Error: Choose new folder.";
}
}
答案 2 :(得分:0)
将其更改为
private async void (pickFolder(object sender, RoutedEventArgs e)
答案 3 :(得分:0)
听取错误消息中的建议也可能是一个好主意:
考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task'。
Task
返回类型使方法“等待”。
其他答案中建议的void
解决方案也有效,但产生了一个'火&amp;忘了'解决方案。建议的做法是实际返回Task
,以便在调用者希望执行某些操作时,例如,由您的方法产生的异常,这是可能的。
引用http://msdn.microsoft.com/en-us/magazine/jj991977.aspx:
“总结第一个指南,你应该更喜欢async Task to async void。异步任务方法可以使错误处理,可组合性和可测试性更容易。”