我在 Windows 8“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
关键字。
最简单/最好的方法是什么?