在意外的时间调用了一个方法

时间:2012-10-27 00:32:12

标签: exception windows-8 windows-runtime local-storage winrt-async

我正在尝试使用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();
}

4 个答案:

答案 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;