Exception 在意外时间调用了一个方法
我试图使用GetFileAsync迭代目录中的所有文件,但每次调用GetResults方法时,它都会抛出一个异常 System.InvalidOperationException:在意外情况下调用了方法 时间 代码很简单Exception 在意外时间调用了一个方法,exception,windows-8,windows-runtime,local-storage,winrt-async,Exception,Windows 8,Windows Runtime,Local Storage,Winrt Async,我试图使用GetFileAsync迭代目录中的所有文件,但每次调用GetResults方法时,它都会抛出一个异常 System.InvalidOperationException:在意外情况下调用了方法 时间 代码很简单 var files = myStorageFolder.GetFilesAsync(); //runs fine var results = files.GetResults(); //throws the exception 我是新赢得8德夫,所以我可能错过了一些明显的东西
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
我是新赢得8德夫,所以我可能错过了一些明显的东西
编辑(已解决)
我正在运行我的控制台应用程序,但是现在程序运行的是异步的,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();
}
您需要等待异步方法完成。因此,您可以使用新的wait作为一个选项:
var files = await myStorageFolder.GetFilesAsync();
您可能需要查看有关处理异步方法的文档。您应该等待
var files=myStorageFolder.getfileasync()代码>因为在进入下一条指令时,操作可能仍在运行var results=files.GetResults()//抛出异常
如果您不想使用async
关键字(在我的例子中,代码在属性中,因此async
不是选项),您可以使用TaskAwaiter
,通过链接这两种方法:
var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
这不会抛出<代码>无效操作异常>代码>也不会造成死锁。 如果您使用的是Wistas.Fastual.IasycCurt之类的任务变量,代码可以是这样的:
var file = StorageFile.GetFileFromPathAsync(protocolArgs.Uri.LocalPath).AsTask().Result;
我需要任何使用语句来使用GetAwaiter
方法吗?@user1我不记得了,这是两年前的事了。但是通过查看文档,这是您需要的扩展方法:。它是在系统
名称空间中定义的,所以您可能已经在范围内了。我注意到GetAwaiter()
正在执行任务
,我试图在iawaitable操作
上使用它,所以我不得不调用AsTask
,然后结果
,该死的UWP
。谢谢你!这也解决了if
语句中的问题。我刚运行应用程序时收到了错误,但如果我在if
语句前面放置了一个断点并使用Step-Into来运行if
语句,则不会收到错误if(ApplicationData.Current.LocalFolder.TryGetItemAsync(“savedFavorites.xml”).GetAwaiter().GetResult()==null)
var file = StorageFile.GetFileFromPathAsync(protocolArgs.Uri.LocalPath).AsTask().Result;