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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  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 2,620 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.810



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 9,044 Último mensaje 21 Julio 2008, 23:44 pm
por Zaraki_lkenpachi
Acceder a controles winforms con hilos
.NET (C#, VB.NET, ASP)
Skeletron 5 4,343 Último mensaje 6 Enero 2010, 23:02 pm
por raul338
crear una biblioteca de manejo de Hilos
Programación C/C++
lama 1 2,466 Último mensaje 25 Abril 2012, 01:45 am
por david_BS
Ayuda Sobre 'Worker'
Java
ZedGe 0 1,235 Último mensaje 16 Julio 2012, 01:22 am
por ZedGe
Manejo de hilos
Java
Antoniio 8 5,024 Ú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