我正在尝试使用GetFilesAsync迭代目录中的所有文件,但每次调用GetResults方法时,都会抛出一个说明
的异常System.InvalidOperationException:在意外时调用了一个方法 时间
代码只是
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
我是Win 8 dev的新手,所以我可能会遗漏一些明显的东西。
编辑(已解决)
我正在运行我的控制台应用程序,但现在程序运行异步,files.GetResult()
方法不再存在。
static void Main(string[] args)
{
var files = GetFiles(myStorageFolder);
var results = files.GetAwaiter().GetResults();//Need to add GetAwaiter()
}
static async Task GetFiles(StorageFolder sf)
{
await sf.GetFilesAsync();
}
答案 0 :(得分:36)
如果您不想使用async
关键字(在我的情况下,代码位于属性中,因此async
不是选项),您可以使用{{1相反,通过链接这两个方法:
TaskAwaiter
这不会抛出var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
也不会导致死锁。
答案 1 :(得分:10)
您需要等待异步方法完成。所以你可以使用new await作为一个选项:
var files = await myStorageFolder.GetFilesAsync();
您可能需要查看有关处理异步方法here的文档。
答案 2 :(得分:1)
你应该await
var files = myStorageFolder.GetFilesAsync();
因为当你接到下一条指令var results = files.GetResults(); //throws the exception
var files = await myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //this will run when call above returns
答案 3 :(得分:0)
如果您使用的是Windows.Foundation.IAsyncOperation之类的Task,则代码可能如下所示:
var file = StorageFile.GetFileFromPathAsync(protocolArgs.Uri.LocalPath).AsTask().Result;