Еще один способ сделать это - использовать функцию this.Dispatcher.CheckAccess()
. Это то же самое, что вы получаете в WPF, но оно не отображается в вашем интеллектуальном значении, поэтому вы, возможно, его не видели. Что вы делаете, это проверяете, есть ли у вас доступ к потоку пользовательского интерфейса, и если вы этого не делаете, вы рекурсивно перезваниваете себе в потоке пользовательского интерфейса .
private void twitterCallback(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
TextReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd();
Console.WriteLine("I am done here");
////TwitterPost.Text = "hello there";
postMyMessage(TwitterPost.Text);
}
private void postMyMessage(string text)
{
if (this.Dispatcher.CheckAccess())
TwitterPost.Text = text;
else
this.Dispatcher.BeginInvoke(new Action<string>(postMyMessage), text);
}
Это просто очень простой пример, который может стать неуправляемым, если у вас есть несколько элементов управления. Для некоторых вещей WPF / Silverlight я использовал общую функцию, которая также принимает элемент управления UI для обновления, а также само обновление, поэтому у меня нет одной из этих функций для каждого элемента управления на странице, который может потребоваться обновить с результаты фонового потока.