Tengo una duda, acerca de la típica excepción:
"Se ha tenido acceso al control ‘tal’ desde un subproceso distinto en el que se ha creado."
En la página de soporte de MSDN, se explica con un ejemplo como solucionar esta excepción, aquel ejemplo (que de hecho funciona) se basa en la colocación de un texto en un TextBox, así:
Código:
delegate void SetTextCallback(string text); private Thread demoThread = null; private void cmd_colocar_texto_forma_segura_clic(object sender, EventArgs e) { this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe)); this.demoThread.Start(); } private void ThreadProcSafe() { this.colocar_texto("Texto aplicado de forma segura"); } private void colocar_texto(string text) { /* Checa por InvokeRequired */ if (this.txt_ejemplo.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { /* InvokeRequired false, se coloca el texto normalmente */ this.txt_ejemplo.Text = text; } }
Pero que pasa si lo que se quiere no es modificar una propiedad Text de un control, sino invocar un método de este. Digamos que tengo un botón llamado cmd_accion y quiero realizar una llamada segura a su método PerformClick(), ¿que cosas tendria que cambiar al ejemplo de arriba?
Ojala alguien me pueda dar una breve explicacion sobre eso, pues todavia no lo capto .
Saludos,