elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  manejo de controles en los hilos background worker
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: manejo de controles en los hilos background worker  (Leído 1,721 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
manejo de controles en los hilos background worker
« en: 8 Enero 2016, 14:28 pm »

hola, en una entrada anterior de  como hacer funcionar un gif en un picture box necesitaba hacer funcionar un gif al hacer una consulta, despues de buscar un poco mas me encontre con el background worker, entonces ahora realizo la consulta, se muestra el gif pero la consulta me debe llenar un textbox (la consulta se realiza bien),  pero al acceder a este textbox me da el error de ("Se intento tener acceso al control txtid desde un subproceso distinto al que lo creó")
Código
  1. private void btncodigo_Click(object sender, EventArgs e)
  2.        {
  3.            if (backgroundWorker1.IsBusy != true)
  4.            {
  5.                this.pictureBox1.Visible = true;
  6.                this.btncodigo.Enabled = false;
  7.                backgroundWorker1.RunWorkerAsync();
  8.            }
  9.            //generarNuevoCodigo();
  10.        }
  11.  
  12.        void generarNuevoCodigo() {
  13.            manzanaDA codigo = new manzanaDA();
  14.            DataTable dt;
  15.            try
  16.            {
  17.               // btncodigo.Visible = false;
  18.                //pictureBox1.Visible = true;
  19.                dt = codigo.cargar("sp_codigo_manzana").Tables[0];
  20.                Codigos nuevo = new Codigos();
  21.                txtid.Text = nuevo.generaCodigo(dt);  //aqui me da la excepcion
  22.  
  23.            }//try
  24.            catch (Exception ex)
  25.            {
  26.                //throw new Exception("Error " + ex.Message);
  27.            }//catch
  28.            finally {
  29.               // pictureBox1.Visible = false;
  30.                //btncodigo.Visible = true;
  31.            }//finally
  32.  
  33.        }
  34.  
  35.        private void txtdescrip_KeyPress(object sender, KeyPressEventArgs e)
  36.        {
  37.            if (e.KeyChar == Convert.ToChar(Keys.Enter)) {
  38.                btnguardar.Select();
  39.                btnguardar.Focus();
  40.            }
  41.        }
  42.  
  43.        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  44.        {
  45.            generarNuevoCodigo();
  46.        }
  47.  
  48.        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  49.        {
  50.            if (e.Cancelled == true)
  51.            {
  52.                this.btncodigo.Enabled = true;
  53.                this.pictureBox1.Visible = false;
  54.            }
  55.            else if (e.Error != null)
  56.            {
  57.                this.btncodigo.Enabled = true;
  58.                this.pictureBox1.Visible = false;
  59.            }
  60.            else
  61.            {
  62.                this.btncodigo.Enabled = true;
  63.                this.pictureBox1.Visible = false;
  64.            }
  65.        }//void generar nuevo codigo
  66.  

todos los controles los creo en tiempo de diseño y no se como manejarlos haciendo nuevos hilos durante la ejecucion


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.700



Ver Perfil
Re: manejo de controles en los hilos background worker
« Respuesta #1 en: 8 Enero 2016, 15:43 pm »

Tienes que modificar el estado del control desde el mismo hilo (UI-thread) donde lo creaste, para ello puedes utilizar el método Control.Invoke (o Control.BeginInvoke si prefieres el asincronismo):
Código
  1. txtid.Invoke(new Action(() => txtid.Text = nuevo.generaCodigo(dt)));

Deberías leer un poco más sobre hilos y delegados, busca ejemplos, guias, tutoriales o consejos en Google (MSDN, CodeProject, etc),
así conseguirías evitar los errores más comunes y principiantes (que todos hemos sufrido) como este.

Saludos!


« Última modificación: 8 Enero 2016, 15:57 pm por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutos: obtener datos y manejo de windows con c#... tuto_1: manejo de procesos
Scripting
tongoxcore 2 7,829 Último mensaje 21 Julio 2008, 23:44 pm
por Zaraki_lkenpachi
Acceder a controles winforms con hilos
.NET (C#, VB.NET, ASP)
Skeletron 5 3,447 Último mensaje 6 Enero 2010, 23:02 pm
por raul338
crear una biblioteca de manejo de Hilos
Programación C/C++
lama 1 1,741 Último mensaje 25 Abril 2012, 01:45 am
por david_BS
Ayuda Sobre 'Worker'
Java
ZedGe 0 753 Último mensaje 16 Julio 2012, 01:22 am
por ZedGe
Manejo de hilos
Java
Antoniio 8 4,148 Último mensaje 9 Mayo 2016, 22:48 pm
por + 1 Oculto(s)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines