Webサービスから非同期でデータを取得し、そのデータでUIを更新するWindowsストアアプリケーションを作成しています。コード(RPC_E_WRONG_THREAD)でApplication.Current.Resourcesにアクセスするときに、いくつかの問題が発生しました。
アプリがどのように起動されるか、アプリの存続期間中にどのスレッドが生成されるか、何ができてアクセスできるか、何ができないかについての説明はどこにありますか?
Webサービスから非同期でデータを取得し、そのデータでUIを更新するWindowsストアアプリケーションを作成しています。コード(RPC_E_WRONG_THREAD)でApplication.Current.Resourcesにアクセスするときに、いくつかの問題が発生しました。
アプリがどのように起動されるか、アプリの存続期間中にどのスレッドが生成されるか、何ができてアクセスできるか、何ができないかについての説明はどこにありますか?
Windows ストア アプリケーションは、ディスパッチャーと呼ばれる単一の UI スレッドがある WPF スレッド モデルに従います。すべての UI の更新/変更などは、ディスパッチャー スレッドで行う必要があります。表示されるエラーは、バックグラウンド スレッドで UI を更新しようとしているということです。
.Net 4.5 は、非同期呼び出しを管理するために新しい async/await メカニズムを使用します。そう:
public async List<Foo> GetMyFooData()
{
return await _myWebService.GetFooData();
}
内部で起こっていることは、UI スレッドをブロックしないように、コンパイラによって非同期メソッドが生成されていることです。
Dispatcher によって取得されることを期待している Access アイテムにアクセスしようとしていると思われます。これがエラーの原因です。