2011-09-26 12 views
7

Sé que Dispatcher.BeginInvoke() se utiliza para ejecutar algún fragmento de código en el hilo de la interfaz de usuario. Recientemente he notado que hay es otra forma de obtener la instancia de Dispatcher mediante la clase 'Despliegue'. Me gustaría saberDiferencia entre los métodos this.Dispatcher.BeginInvoke() y Deployment.Current.Dispatcher.BeginInvoke() en Silverlight

¿Hay alguna diffrence entre la invocación de this.Dispatcher.BeginInvoke() y Deployment.Current.Dispatcher.BeginInvoke() funciones?, Y

cuándo debo usar this.Dispatcher.BeginInvoke() y Deployment.Current.Dispatcher.BeginInvoke()?

Gracias Alex

Respuesta

11

Respuesta corta: Ellos son los mismos en Silverlight, a fin de utilizar el más corto (si está disponible en el contexto de su código).

this.Dispatcher.BeginInvoke() garantiza que se ejecuta en la hebra en la que se está ejecutando el control en cuestión.

Deployment.Current.Dispatcher.BeginInvoke() asegura que se ejecuta en el hilo de la IU principal.

Los dos son siempre los mismos en Silverlight (y generalmente lo mismo en WPF, a menos que haya creado subprocesos UI adicionales).

Utilice this.Dispatcher.BeginInvoke() a menos que su contexto actual no tenga un despachador, luego use el global en su lugar.

+0

¿En qué circunstancias no son iguales? – AnthonyWJones

+0

@AnthonyWJones: Dispatcher.Current recupera el objeto de envío asociado con el hilo que está ejecutando el código. Por lo tanto, no son lo mismo cuando se invocan hilos diferentes. – Will

+0

@Will: ¿Te refieres a Deployment.Current o Dispatcher.Current? – wizzardz

Cuestiones relacionadas