application is already running the dispatcher
*Nota: El ejemplo al que se hace referencia ya no está disponible a partir de 2013. Un nuevo ejemplo de navegador web multiproceso muestra una técnica y un código similares. El primer problema: el hilo creado se ejecutará continuamente hasta que la aplicación se cierre, según el código del ejemplo. El problema es que el delegado ThreadStart utilizado finaliza con la ejecución del Dispatcher. Sin embargo, nada detiene el procesamiento de Dispatcher.  Sin embargo, hay ocasiones excepcionales en las que puede resultar beneficioso crear un subproceso independiente y dedicado para una ventana. Esto incluso se reconoce en los ejemplos de MSDN, como el ejemplo Múltiples ventanas, múltiples subprocesos*. Sin embargo, hacer esto correctamente es difícil. Normalmente, en una aplicación MVVM Light, DispatcherHelper se inicializa en App.xaml.cs, que es el archivo que define la clase de inicio de la aplicación. En Windows Phone, llama a DispatcherÂHelper.Initialize en el método InitializePhoneApplication, justo después de crear el marco principal de la aplicación.  Una última cosa sobre la clase Dispatcher es que una aplicación determinada puede tener sólo una instancia de la clase Dispatcher (ya que la aplicación se ejecuta en un solo subproceso), por lo que la clase Dispatcher implementa el famoso patrón "Singleton". Por eso es imposible crear una instancia de la clase Dispatcher en nuestro código personalizado. Se llama a Ejecutar para iniciar una aplicación WPF. Si define su aplicación mediante marcado, o marcado y código subyacente, se llamará a Ejecutar implícitamente. Sin embargo, si define su aplicación mediante código, deberá llamar explícitamente a Ejecutar. Cuando se llama a Ejecutar, la aplicación adjunta una nueva instancia de Dispatcher al subproceso de la interfaz de usuario. A continuación, se llama al método Run del objeto Dispatcher, que inicia un envío de mensajes para procesar los mensajes de Windows. Finalmente, el objeto Dispatcher llama al método OnStartup del objeto Aplicación para generar el evento de Inicio.  Un buen ejemplo de esta tendencia es el marco Windows Runtime utilizado en las aplicaciones de la Tienda Windows. En estas aplicaciones cliente modernas, las operaciones asincrónicas (operaciones que se ejecutan en subprocesos en segundo plano) son muy comunes. Por ejemplo, cada acceso a archivos en Windows 8 es ahora una operación asincrónica. Mientras se ejecuta la aplicación WPF, la clase Dispatcher acepta solicitudes entrantes y las ejecuta una a la vez. En resumen, el despachador es un objeto que recibe mensajes y los entrega al objeto correcto para su posterior procesamiento. La clase Dispatcher es bastante densa con muchas propiedades y métodos.  El código anterior en negrita realiza la tarea de cerrar el despachador del hilo de la interfaz de usuario de Windows. Ejecutar múltiples subprocesos de UI en una aplicación WPF es en realidad bastante trivial. En pocas palabras, todo se reduce a crear su hilo dedicado y crear sus ventanas dentro del proceso de este hilo. Recuerde concluir su hilo de UI con una llamada al despachador de WPF.  Como sugiere el nombre, este método realiza una verificación primero. Si la persona que llama al método ya se está ejecutando en el hilo principal, no es necesario realizar ningún envío. En ese caso, el delegado se ejecuta inmediatamente, directamente en el hilo principal. Sin embargo, si la persona que llama está en un hilo en segundo plano, se ejecuta el envío. El hilo que controla la aplicación se conoce comúnmente como UIThread. El concepto de "Dispatcher" es un mecanismo introducido en WPF, con la ayuda del cual el desarrollador puede tener un control más explícito sobre este hilo de la interfaz de usuario en cuanto a qué se ejecuta y cuándo. Analizaremos esto con más detalle en la sección restante de este artículo.
 MVVM Luz y WPF.