GetFilesAsyncを使用してディレクトリ内のすべてのファイルを反復しようとしていますが、GetResultsメソッドを呼び出すたびに、次のような例外がスローされます。
System.InvalidOperationException:予期しないときにメソッドが呼び出されました
コードは単純です
_var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
_
私はWin8 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();
}
_
Asyncメソッドが完了するのを待つ必要があります。したがって、新しいawaitを1つのオプションとして使用できます。
var files = await myStorageFolder.GetFilesAsync();
非同期メソッドの処理に関するドキュメントを確認することをお勧めします ここ 。
async
keywordを使用したくない場合(私の場合、コードはプロパティ内にあるため、async
はオプションではありませんでした)、TaskAwaiter
を使用できます。代わりに、これらの2つのメソッドをチェーンすることによって:
var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
これにより、InvalidOperationException
がスローされたり、デッドロックが発生したりすることはありません。
次の命令に到達したときに操作がまだ実行されている可能性があるため、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