Ich habe dieses Deployment.Current.Dispatcher.BeginInvoke (() => {...}) -Format in einem Code gesehen.Wird es im Hintergrund verwendet? Was sind die allgemeinen Verwendungen?Was nutzt Deployment.Current.Dispatcher.BeginInvoke (() => {...})?
Antwort
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.
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
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.
Jon, die Popularität Ihrer Beiträge auf SO ist außergewöhnlich. Mein Hut ist für Sie :) –
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
@JonSkeet: Wie kann ich einen Code in einem Hintergrund-Thread ausführen, wie dieser Code meine Fortschrittsleiste blockiert von der UI – Rohaan