1

当我尝试这样做时:

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

它向我显示错误:

错误 2 'await' 运算符只能在异步方法中使用。考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”。C:\Users\Lukasz\Documents\Visual Studio 2012\Projects\RobimyProjekt\RobimyProjekt\ImageBrowser.xaml.cs。

当我删除“等待”时,它显示了另一个错误:

错误 2 无法将类型“Windows.Foundation.IAsyncOperation”隐式转换为“Windows.Storage.StorageFolder”C:\Users\Lukasz\Documents\Visual Studio 2012\Projects\RobimyProjekt\RobimyProjekt\ImageBrowser.xaml.cs 61 36 RobimyProjekt。

这是怎么回事?该代码来自 msdna,我使用 Visual Studio 2012。

4

4 回答 4

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);
    }

}

于 2013-09-18T05:28:24.143 回答
1

以下对我有用。我花了几天时间才弄明白。但是,对于我自己的学习项目,我想看看我是否可以制作一个文件夹、文件,然后从中读取。我只是能够通过执行以下操作在我指定的路径中创建我的文件夹。

当然,我将一个文本框对象作为参数传递;但是,不管这一点,当我尝试使用 aFolderPicker和 a创建我的文件夹时,以下内容对我有用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.";
    }
}
于 2019-01-01T19:45:59.927 回答
0

听取错误消息中的建议也可能是一个好主意:

考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”。

Task返回类型使方法“可等待” 。

其他答案中建议的void解决方案也有效,但会产生“fire & forget”解决方案。推荐的做法是实际返回 a Task,以便如果调用者希望对例如由您的方法产生的异常做某事,这是可能的。

引用http://msdn.microsoft.com/en-us/magazine/jj991977.aspx

“总结第一个准则,您应该更喜欢 async Task 而不是 async void。Async Task 方法可以更轻松地处理错误、可组合性和可测试性。”

于 2013-09-18T12:50:02.617 回答
0

将其更改为

private async void (pickFolder(object sender, RoutedEventArgs e)
于 2013-09-18T03:50:51.213 回答