2009-08-30 17 views
6

Estoy escribiendo una aplicación de Windows filewatcher que buscará los cambios en una carpeta especificada y luego registrará los detalles en un archivo txt.Operación entre hilos no válida: Control accedido desde un hilo que no sea el hilo que se creó en

que siguieron exactamente lo que se menciona en este artículo a continuación http://www.codeproject.com/KB/dotnet/folderwatcher.aspx

Cuando golpeo F5 de mi solicitud y luego crear o modificar un archivo en la carpeta que está siendo observado que arroja el error mencionado a continuación.

Por favor, ayudar a

operación de la Cruz-hilo no válido: Control 'txtFolderActivity' se accede desde un subproceso distinto del subproceso que se creó el.

Respuesta

9

Tienes que usar el método Invoke en el formulario, p. con un delegado anónimo para hacer los cambios en reacción al evento.

El controlador de eventos se genera con otro hilo. Este segundo hilo no puede acceder a los controles en su forma. Tiene que "invocarlos" para que el hilo haga todo el trabajo de control que inicialmente los creó.

En lugar de:

myForm.Control1.Text = "newText"; 

usted tiene que escribir:

myForm.Invoke(new Action(
delegate() 
{ 
    myForm.Control1.Text = "newText"; 
})); 
+0

1 - Necesito probar su manera de resolver este problema, ya que es considerablemente más simple que mi enfoque actual. una gran cantidad @Mischa –

+0

1 Gracias. Esto hizo que mi tarea muy fácil. :) – IsmailS

3

Usted está intentando actualizar la interfaz de usuario de un hilo no interfaz de usuario. La interfaz de usuario tiene una afinidad de subprocesos y solo se puede actualizar a partir de un subproceso que la creó. Si está utilizando WinForms, consulte How to: make thread-safe calls to Windows Forms Controls artículo de MSDN. Básicamente, deberá actualizar la interfaz de usuario a través del método Control.Invoke. Para WPF, necesita usar DispatcherObject.

1

Básicamente, usted debe tener dos hilos en su aplicación, por lo menos, y el hilo que la lógica de control está funcionando es diferente, por lo que obtener este error, ya que los controles no están protegidas por hebras.

Esto es para protegerse de los problemas que podrían ser causados ​​por múltiples hilos que cambian el mismo control al mismo tiempo.

Usted puede encontrar muchos más detalles examinado aquí: http://msdn.microsoft.com/en-us/library/ms171728%28VS.80%29.aspx

Cuestiones relacionadas