Operación entre hilos no válida

Posible duplicado:
Operación entre hilos no válida: control al que se accede desde un hilo que no sea el hilo en el que se creó

De acuerdo, sé por qué esto me está dando este error:

Operación entre hilos no válida: Controle el ‘Form1’ al que se accede desde un hilo que no sea el hilo en el que se creó.

Pero … ¿Cómo puedo hacer esto viable?

System.Threading.Thread t = new System.Threading.Thread(()=> { // do really hard work and then... listView1.Items.Add(lots of items); lots more UI work }); t.Start(); 

No me importa cuándo o cómo termina el Thread, así que realmente no me importa nada de capricho sofisticado o complicado, a menos que haga las cosas mucho más fáciles cuando trabaje con la UI en un nuevo Thread.

No puedes. Las operaciones de la interfaz de usuario se deben realizar en el hilo propietario. Período.

Lo que podría hacer es crear todos esos elementos en un hilo secundario, luego llamar a Control.Invoke y hacer su enlace de datos allí.

O usa un BackgroundWorker

  BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s, e) => { /* create items */ }; bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ }; bw.RunWorkerAsync(); 

Cuando accede a la propiedad del remitente desde otro hilo, se lanza esta excepción. Para evitar este problema, hay al menos 2 opciones.

  1. Diciendo a Control que no arroje estas excepciones (que no se recomienda):

    Control.CheckForIllegalCrossThreadCalls = false;

  2. Uso de funciones seguras para el hilo:

     private void ThreadSafeFunction(int intVal, bool boolVal) { if (this.InvokeRequired) { this.Invoke( new MethodInvoker( delegate() { ThreadSafeFunction(intVal, boolVal); })); } else { //use intval and boolval } }