2010-03-17 15 views
5

En el constructor de un objeto que necesito para crear un objeto de WPF MediaElement:Conseguir la derecha despachador de WPF en un hilo

m_videoMedia = new MediaElement(); 

pero la clase también se pueden crear instancias de un otro hilo por eso es necesario utilizar

Dispatcher.Invoke(DispatcherPriority.Normal, 
    (Action)(() => { m_videoMedia = new MediaElement(); })); 

Pero, ¿cómo puedo obtener la instancia despachador justo en ese constructor: s

Respuesta

8

lo más probable es simplemente usar Dispatcher.CurrentDispatcher .Invoke ...

Sin embargo, si por alguna razón eso no funciona, podría hacer que su clase reciba una referencia al Dispatcher como parte de su constructor. Solo pase el Dispatcher.CurrentDispatcher desde el hilo de UI en el momento de la construcción.

+8

De acuerdo con msdn esto devolverá el despachador asociado con el hilo actual y creará uno nuevo de uno que todavía no está creado. Esto no suena como algo que quieras hacer en este caso. Necesitará el despachador asociado con la interfaz de usuario. O más específicamente, el despachador de una ventana específica. –

+0

+1 para pasar una referencia al despachador actual. – Nate

+0

El Dispatcher.CurrentDispatcher estático no funcionó para mí en un escenario similar. Intenté Application.Current.Dispatcher según lo sugerido por sinelaw - eso funcionó. –

2

La mayoría de los controles WPF derivan de DispatcherObject que tiene la propiedad Dispatcher que necesita. Entonces, básicamente, utilizaría el despachador desde el control que desea usar. En este caso, por ejemplo, la ventana donde se agrega MediaElement.

-1

Si agrega referencias a System.Windows.Forms en su proyecto, puede continuar usando Application.DoEvents() en WPF.

5

As explained in this answer:

se puede agarrar la interfaz de usuario del despachador de la instancia de la aplicación estática: Application.Current.Dispatcher

Es posible que desee comprobar Application.Current para nula en primer lugar, ya que puede ser despejado durante una secuencia de apagado .

También, here are the docs para la clase de aplicación.

Cuestiones relacionadas