exception windows-8 windows-runtime local-storage winrt-async

exception - Un método fue llamado en un momento inesperado



windows-8 windows-runtime (3)

Estoy intentando iterar todos los archivos en un directorio usando GetFilesAsync, pero cada vez que llamo al método GetResults, se produce una excepción que dice

System.InvalidOperationException: se llamó a un método en un momento inesperado

El código es simplemente

var files = myStorageFolder.GetFilesAsync(); //runs fine var results = files.GetResults(); //throws the exception

Soy nuevo en Win 8 dev, así que podría estar perdiendo algo obvio.

Editar (solucionado) Estoy ejecutando mi aplicación de consola, pero ahora que el programa ejecuta async, el files.GetResult() los files.GetResult() ya no existe.

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


Si no desea usar la palabra clave async (en mi caso, el código estaba dentro de una propiedad, por lo que async no era una opción), puede usar un TaskAwaiter en TaskAwaiter lugar, encadenando estos dos métodos:

var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();

Esto no lanzará una InvalidOperationException ni causará un interbloqueo.


Tienes que esperar a que se complete el método asíncrono. Así que podrías usar el nuevo aguardar como una opción:

var files = await myStorageFolder.GetFilesAsync();

Es posible que desee consultar la documentación sobre cómo tratar con los métodos asíncronos here .


debe await los var files = myStorageFolder.GetFilesAsync(); ya que la operación podría seguir ejecutándose cuando llegue a la siguiente instrucción var results = files.GetResults(); //throws the exception 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