Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema para manejar ProgressBar a traves de Hilos

Estas en el tema de Problema para manejar ProgressBar a traves de Hilos en el foro de .NET en Foros del Web. En clase de un profesor nos encontramos viendo el tema de los Threads en C#, para mí no es problema entenderlo, sé para qué son ...
  #1 (permalink)  
Antiguo 27/03/2009, 13:55
Avatar de chuy_meza18  
Fecha de Ingreso: diciembre-2004
Ubicación: Los Mochis, Sinaloa, Mexico
Mensajes: 226
Antigüedad: 19 años, 4 meses
Puntos: 5
Información Problema para manejar ProgressBar a traves de Hilos

En clase de un profesor nos encontramos viendo el tema de los Threads en C#, para mí no es problema entenderlo, sé para qué son y cómo crearlos y manejarlos.

Mi problema surge a la hora de querer crear ProgressBar por medio de Threads en C# 2008 (Visual Studio 2008), me marca un error que en este momento no recuerdo cuál es, pero básicamente en MSDN me dicen que no estoy usando de manera segura los subprocesos para utilizar componentes de WinForms.

El error es el siguiente: "Operación no válida a través de subprocesos: Se tuvo acceso al control 'lbl_tiempo' desde un subproceso distinto a aquel en que lo creó."

He estudiado la ayuda por 3 veces pero no entiendo muy bien el ejemplo, busco y busco en la red pero no encuentro algo que pueda entender por lo menos un poco.

Aquí les pongo el código de ejemplo que vimos en una clase y que no me funciona desde Visual Studio 2008:

Cita:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace hilo_tiempo
{
public partial class Form1 : Form
{
Thread hilo = null;
int crono = 0;
public Form1()
{
InitializeComponent();
}

public void contar()
{
crono++;
lbl_tiempo.Text = Convert.ToString(crono);
Thread.Sleep(1000);
}

private void btn_begin_Click(object sender, EventArgs e)
{
hilo = new Thread(this.contar);
hilo.Start();
}

private void btn_stop_Click(object sender, EventArgs e)
{
hilo.Abort();
}
}
}
Bueno este es el programita tal cual, es muy simple pero no encuentro solución.
Saludos.
__________________
MySoft Corporation.
Lucho por lo que creo, hasta que la lógica y la experiencia prueben lo contrario.
  #2 (permalink)  
Antiguo 27/03/2009, 14:11
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema para manejar ProgressBar a traves de Hilos

La duda es sobre C# .NET, así que por aquí te ayudarán mejor.

Mensaje transladado desde C/C++
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 27/03/2009, 17:20
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 5 meses
Puntos: 22
Respuesta: Problema para manejar ProgressBar a traves de Hilos

El problema se debe a que no puedes modificar objetos de la interfaz desde un hilo diferente al principal, para solucionar este problema encapsula en un metodo dentro de la clase la modificación que quieras hacer al progress bar y luego desde el hilo llamalo utilizando un delegado.

Saludos
  #4 (permalink)  
Antiguo 27/03/2009, 21:17
Avatar de chuy_meza18  
Fecha de Ingreso: diciembre-2004
Ubicación: Los Mochis, Sinaloa, Mexico
Mensajes: 226
Antigüedad: 19 años, 4 meses
Puntos: 5
Respuesta: Problema para manejar ProgressBar a traves de Hilos

Cita:
Iniciado por gedarufi Ver Mensaje
El problema se debe a que no puedes modificar objetos de la interfaz desde un hilo diferente al principal, para solucionar este problema encapsula en un metodo dentro de la clase la modificación que quieras hacer al progress bar y luego desde el hilo llamalo utilizando un delegado.

Saludos
Encapsular... Entendido
Hilo diferente al principal... perdón?? cuando cree un hilo que no fuera el que yo hago en el método?
delegado... no entiendo.

jajajajaja veo que me falta mucho por aprender, tendré que investigar, manos a la obra
__________________
MySoft Corporation.
Lucho por lo que creo, hasta que la lógica y la experiencia prueben lo contrario.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:16.