I'm trying to iterate all files in a directory using GetFilesAsync, but every time I call the GetResults method, it throws an exception that says
System.InvalidOperationException: A method was called at an unexpected time
The code is simply
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
I'm new to Win 8 dev so I might be missing something obvious.
Edit (solved)
I'm running my console application, but now that the program runs async, the files.GetResult()
method no longer exists.
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();
}
If you don't want to use the async
keyword (in my case, the code was inside a property, so async
wasn't an option), you can use a TaskAwaiter
instead, by chaining these two methods:
var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
This won't throw a InvalidOperationException
nor cause a deadlock.