2011-01-13 10 views

risposta

41

No, non è fare un lavoro in uno sfondo filo - è di fare un lavoro sulla UI thread. Quindi è normalmente chiamato da un thread in background, al fine di manipolare l'interfaccia utente, che può essere eseguita solo sul thread dell'interfaccia utente.

Il corpo dell'espressione lambda è il codice che si desidera eseguire nel thread dell'interfaccia utente.

+1

Jon, la popolarità dei tuoi post su SO è eccezionale. Il mio cappello è fuori per voi :) –

+8

È anche importante ricordare che BeginInvoke può essere utilizzato dal thread stesso dell'interfaccia utente a un'azione successiva sul thread dell'interfaccia utente dopo che la coda di azione dell'interfaccia utente esistente è vuota. In sostanza, posticipare il lavoro fino a quando il thread dell'interfaccia utente non sta più facendo nulla. – JustinAngel

+0

@JonSkeet: come posso eseguire un codice in un thread in background, poiché questo codice impedisce alla barra di avanzamento di mostrare sull'interfaccia utente – Rohaan

6

Quando il codice che aggiorna l'interfaccia utente viene eseguito da un thread diverso dal thread dell'interfaccia utente, si verifica un'eccezione di accesso cross-thread non valida.

Il dispatcher consente di passare del codice al thread dell'interfaccia utente da un altro thread.

Il progetto che ho inserito in questo post dimostra questo, tra gli altri concetti.

WebClient, HttpWebRequest and the UI Thread on Windows Phone 7

2

è necessario utilizzare Deployment.Current. Dispatcher in un'applicazione SilverLight quando ci si trova a lavorare in un thread di lavoro non dell'interfaccia utente (all'interno di un contesto che non eredita da DependencyObject) ed è necessario aggiornare l'interfaccia utente.

Problemi correlati