Windows 8 "Metro"응용 프로그램에 단추와 텍스트 블록이 있습니다. 버튼을 클릭하면 HttpWebRequest를 통해 웹 서비스가 호출됩니다.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
}
내가 WebRequest 클래스에서 반환 된 데이터로 info.Text
를 업데이트 할, 그러나 그것은 오류가 발생합니다 : 는 "응용 프로그램이 다른 스레드 정렬 화 된 인터페이스를했다." 이것이 UI 스레드에서 호출되지 않기 때문입니다.
나는 Dispatcher
, SynchronizationContext
, await
키워드와 관련된 다양한 솔루션을 발견했습니다.
가장 쉬운 방법은 무엇입니까?
,하지만 난 (()가 info.Dispatcher.Invoke'처럼 뭔가 될 것 = 상상이가 UI 스레드로 호출을 전달 현재 CoreDispatcher를 사용하여 수행됩니다 .Text = responseString); ' –