2009-09-01 10 views

Respuesta

14

Esto básicamente describe una manera de empujar el trabajo entre los hilos; para insertar un elemento de trabajo en el otro subproceso, utilice Invoke (síncrono) o BeginInvoke (asíncrono - lo ideal es llamar al EndInvoke más tarde). Del mismo modo, InvokeRequired se usa para preguntar "¿Necesito hacer esto? ¿O puedo ejecutar el trabajo yo mismo?".

El uso más común de esta interfaz es en Windows-forms, donde es parte de cómo insertar trabajo en el hilo de la interfaz de usuario; por supuesto, puede usar Control.Invoke/Control.BeginInvoke, pero los controles de formularios implementan esta interfaz para permitir la abstracción, por lo que el código descendente no necesita vincularse con los formularios de Windows. En el caso de formularios, InvokeRequired significa "¿soy el hilo de la interfaz de usuario?".

En realidad, no estoy seguro de que sea tan común usarlo directamente. Es más común manejar eventos en la IU y hacer que la IU maneje la conmutación de hilos utilizando el mecanismo local más apropiado.

uso típico:

obj.Invoke((MethodInvoker) SomeMethod); 

que ejecuta (a través de un delegado) SomeMethod en el subproceso administrado por obj (que implementa la interfaz).

+0

gracias marc es una gran respuesta. –

+0

Recientemente he visto una implementación muy fácil de 'ISynchronizeInvoke' acompañada de una implementación' IAsyncResult' muy simple: http://gurkashi.blogspot.com/2011/01/hi-all- in-this-post-i-will-demonstrat.html. No para hacer una pregunta, pero me pregunto si, ahora, con .Net 4.5 puedo usar async/await en lugar del patrón old-school de BeginInvoke con devoluciones de llamada. Aunque la interfaz dice 'BeginInvoke', * bajo el capó * puedo implementar desde mi caja de herramientas 4.5. – IAbstract

2

ISynchronizeInvoke Interface

La interfaz ISynchronizeInvoke proporciona síncrona y asíncrona comunicación entre objetos sobre la ocurrencia de un evento. Los objetos que implementan esta interfaz pueden recibir notificación de que se ha producido un evento , y pueden responder a consultas sobre el evento. De esta forma, los clientes pueden asegurarse de que se haya procesado una solicitud antes de enviar una solicitud posterior que depende de la terminación de la primera de .

también se refieren

http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx

+0

Yap..creo que esto se puede utilizar para actualizar la IU en el hilo principal utilizando el hilo de fondo de la lógica de nivel inferior? –

Cuestiones relacionadas