2011-01-13 4 views

Antwort

41

Nein, es ist nicht die Arbeit in einem Hintergrund Thread zu tun - es ist Arbeit an dem UI Thread zu tun. So ist es normalerweise genannt von einem Hintergrund-Thread, um die UI zu manipulieren, die nur auf dem UI-Thread erfolgen kann.

Der Rumpf des Lambda-Ausdrucks ist der Code, den Sie im UI-Thread ausführen möchten.

+1

Jon, die Popularität Ihrer Beiträge auf SO ist außergewöhnlich. Mein Hut ist für Sie :) –

+8

Es ist auch wichtig zu erwähnen, dass BeginInvoke vom UI-Thread selbst zu einer Folgeaktion auf dem UI-Thread verwendet werden kann, nachdem die vorhandene UI-Aktions-Warteschlange leer ist. Arbeit im Wesentlichen aufschieben, bis der UI-Thread nichts mehr tut. – JustinAngel

+0

@JonSkeet: Wie kann ich einen Code in einem Hintergrund-Thread ausführen, wie dieser Code meine Fortschrittsleiste blockiert von der UI – Rohaan

6

Wenn Code, der die Benutzeroberfläche aktualisiert, von einem anderen Thread als dem UI-Thread ausgeführt wird, tritt eine ungültige Thread-zu-Thread-Ausnahme auf.

Mit dem Dispatcher können Sie Code aus einem anderen Thread an den UI-Thread übergeben.

Das Projekt, das ich in diesen Beitrag geschrieben habe, zeigt dies unter anderem.

WebClient, HttpWebRequest and the UI Thread on Windows Phone 7

2

müssen Sie Deployment.Current verwenden. Dispatcher in einer SilverLight-Anwendung, wenn Sie in einem Nicht-UI-Arbeitsthread arbeiten (in einem Kontext, der nicht von DependencyObject erbt), und Sie die Benutzeroberfläche aktualisieren müssen.