Programadores dedicados a C sharp .Net, eres nuevo, experto o quieres aprender a programar en C Sharp, aquí encontraras todo lo que necesitas.
 
ÍndiceCalendarioFAQBuscarMiembrosGrupos de UsuariosChatRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Últimos temas
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Síguenos:
Crear foro Crear foro Crear foro

Comparte | 
 

 Acceso a un control desde un subproceso utilizando delegados.

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Guillermo Javier Salazar
STAFF TEAM
STAFF TEAM


Mensajes : 181
Puntos : 349
Localización : México
Comentarios : El azar favorece a una mente preparada.

MensajeTema: 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.
Volver arriba Ir abajo
Ver perfil de usuario http://cspromex.activo.mx
xcyber-dj
Novato


Mensajes : 1
Puntos : 1

MensajeTema: 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
Volver arriba Ir abajo
Ver perfil de usuario
Guillermo Javier Salazar
STAFF TEAM
STAFF TEAM


Mensajes : 181
Puntos : 349
Localización : México
Comentarios : El azar favorece a una mente preparada.

MensajeTema: 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!!.
Volver arriba Ir abajo
Ver perfil de usuario http://cspromex.activo.mx
JPUM
Principiante


Mensajes : 6
Puntos : 6

MensajeTema: 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.......
Volver arriba Ir abajo
Ver perfil de usuario
Contenido patrocinado




MensajeTema: Re: Acceso a un control desde un subproceso utilizando delegados.   Hoy a las 11:48 pm

Volver arriba Ir abajo
 
Acceso a un control desde un subproceso utilizando delegados.
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» Acceso de invitados y desde buscadores en foro privado
» ACCESO A CLANTV-JUEGOS DESDE MI KIRA N8000
» ¿Cómo crear un widget de acceso rápido desde el que se pueda acceder a las secciones del foro?
» Acceso desde resultado Google sin logearse.
» Acceso al Foro desde una web ya creada

Permisos de este foro:No puedes responder a temas en este foro.
CSPromex :: PROGRAMACIÓN EN C# :: Código abierto-
Cambiar a: