我在Windows 8「Metro」應用程序中有一個按鈕和一個文本塊。當按鈕被點擊時,它會通過HttpWebRequest調用Web服務。從Windows 8/WinRT中的不同線程更新UI元素
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
關鍵字。
什麼是最簡單/最好的方法來做到這一點?
我沒有使用WinRT的特別,但我想它會像'info.Dispatcher.Invoke(()=>信息.Text = responseString);' –