Windows8の「Metro」アプリケーションにボタンとテキストブロックがあります。ボタンがクリックされると、HttpWebRequestを介してWebサービスが呼び出されます。
private void buttonGo_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/");
req.BeginGetResponse(ResponseCallback, req);
}
private void ResponseCallback(IAsyncResult asyncResult)
{
HttpWebRequest req = (HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(asyncResult);
Stream streamResponse = res.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
info.Text = responseString; // Can't do this as outside the UI thread
}
info.Text
WebRequestから返されたデータで更新したいのですが、 「アプリケーションが別のスレッド用にマーシャリングされたインターフェイスを呼び出しました」というエラーが発生します。これは、UIスレッドから呼び出されていないためだと理解しています。
私はDispatcher
、、、キーワードを含むさまざまな異なる解決策を見つけました。SynchronizationContext
await
これを行うための最も簡単/最良の方法は何ですか?