Guillermo Javier Salazar STAFF TEAM
Mensajes : 181 Puntos : 349 Localización : México Comentarios : El azar favorece a una mente preparada.
| Tema: Acceso a un control desde un subproceso utilizando delegados. Vie Mar 11, 2011 10:09 pm | |
| Acceso a un control desde un subproceso utilizando delegados.Un delegado es un tipo especial de clase cuyos objetos pueden almacenar referencias a uno o más métodos de tal manera que a través del objeto sea posible solicitar la ejecución de los métodos. Cuando se está ejecutando la aplicación y un subproceso distinto al que ha creado un control intenta llamar a ese control, el depurador provoca un "InvalidOperationException" con el mensaje: "Operación no válida a través de subprocesos: Se tuvo acceso al control (nombre de control) desde un subproceso distinto a aquel en que lo creó". Parecerá algo raro e inusual, pero sera algo que verán con frecuencia: - Código:
-
using System; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Thread hilo;
public Form1() { InitializeComponent(); }
public void Sumar() { label1.Text = "C# programadores "; }
private void button1_Click(object sender, EventArgs e) { hilo = new Thread(new ThreadStart(Sumar)); hilo.Start(); } } } En el código anterior intentamos llamar a la propiedad "text" de la etiqueta "label1", desde un Thread, el código se ve bastante limpio y claro, y al ejecutarlo no nos marcara error, pero al dar click sobre el boton se genera la excepcion antes mencionada, para corregir esto utilizaremos un Delegado. Creamos un método en cual ponemos la llamada a nuestro control (dividi el mensaje para que vean el como usarlo con parametros) y crearemos un delegado con las mismas características de dicho método, luego crearemos un objeto de nuestro delegado y haremos referencia de nuestro método, invocamos el método en el subproceso que ha creado el control y le pasamos parámetros. - Código:
-
using System; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Thread hilo; delegate void MyDelegado(string text);
public Form1() { InitializeComponent(); }
public void Sumar() { MyDelegado MD = new MyDelegado(Mostrar); this.Invoke(MD, new object[] { "Mexico" }); }
public void Mostrar(string text) { label1.Text = "C# programadores " + text; }
private void button1_Click(object sender, EventArgs e) { hilo = new Thread(new ThreadStart(Sumar)); hilo.Start(); } } } Ya con esto, podemos manipular los controles desde un subproceso. Los delegados son piezas claves en .Net, ya que son útiles para muchas cosas, aunque también tienden a ser un poco enredados. | |
|
xcyber-dj Novato
Mensajes : 1 Puntos : 1
| Tema: Re: Acceso a un control desde un subproceso utilizando delegados. Vie Mar 25, 2011 2:04 pm | |
| YO QUIERO HAVER ALGO SIMILAR, LA VERDD ES QUE SOY NUEVO EN ESTO DE C SHARP, MI PROBLEMA ES QUE TENGO UN PROYECTO DE TRES FORMS, EN LA PRIMERA REALIZO UNA SERIE DE OPERACIONES Y EL RESULTADO LO GUARDO EN UNA VARIABLE, PERO ESA VARIABLE DESPUES LO QUIERO UTILIZAR EN EL FORM 3, PERO COMO LE HAGO?....
ESPERO QUE PUEDAN MOSTRARME UNA SOLUCION... Y SI SE PUEDE Y SI NO ES MUCHO PEDIR, UN EJEMPLO DE ELLO... GRACIAS | |
|
Guillermo Javier Salazar STAFF TEAM
Mensajes : 181 Puntos : 349 Localización : México Comentarios : El azar favorece a una mente preparada.
| Tema: Re: Acceso a un control desde un subproceso utilizando delegados. Vie Mar 25, 2011 3:21 pm | |
| Saludos xcyber-dj, pues lo que quieres hacer no es dificil, solamente mandas las variables al constructor del siguiente form, en cuanto pueda subo un ejemplo.
Y este no es el lugar para que expongas una duda ajena al código que puse, para ello tenemos la sección de "foro de ayuda", hay puedes exponer cualquier duda que tengas, como esta.
Por tal motivo en un par de dias borrare estos 2 comentarios, y en cuanto pueda pondré un ejemplo de lo que necesitas, saludos!!. | |
|
JPUM Principiante
Mensajes : 6 Puntos : 6
| Tema: Re: Acceso a un control desde un subproceso utilizando delegados. Miér Mayo 01, 2013 9:43 am | |
| Gracias es justo lo que buscaba si me funcionó muchas gracias....... | |
|
Contenido patrocinado
| Tema: Re: Acceso a un control desde un subproceso utilizando delegados. | |
| |
|