2009-11-10 18 views

Respuesta

15

Ver this explanation.

SynchronizationContext.Current sólo se establece en el hilo principal (que es el único hilo en el que en realidad no lo necesita)

La entrada de blog propone una solución alternativa.

+0

Niza solución! – psulek

18

Para que funcione.

En su clase de

private SynchronizationContext synchronizationContext; 

En el hilo de interfaz de usuario (hilo principal)

synchronizationContext = System.Threading.SynchronizationContext.Current; 

En el subproceso de trabajo

synchronizationContext.Post( 
    state => DoUpdateInUIThread((Abc)state),  
    abc); 
+0

¿Cómo se crea una instancia de syncronizationContext en el subproceso de trabajo o se pasa al mismo? – Tim

+0

Digamos que está utilizando un 'BackgroundWorker' en su formulario. Si guardas 'SynchronizationContext.Current' en tu constructor o cargas el evento como una variable de nivel de clase, será accesible en el controlador' RunWorkerCompleted'. Alternativamente, si está haciendo el trabajo en otra clase, como un presentador, puede crear el presentador en el hilo de la interfaz de usuario y guardar el contexto en el constructor. –

Cuestiones relacionadas