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

ProgressBar y C#

Estas en el tema de ProgressBar y C# en el foro de .NET en Foros del Web. Veamos a ver si alguien puede echarme una mano: Necesito hacer un progressbar que al finalizar, muestre un nuevo formulario; previamente cargaré datos de ciudades ...
  #1 (permalink)  
Antiguo 16/05/2009, 15:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
ProgressBar y C#

Veamos a ver si alguien puede echarme una mano:


Necesito hacer un progressbar que al finalizar, muestre un nuevo formulario; previamente cargaré datos de ciudades en este formulario desde el formulario del progress, dicho de otra manera en el formulario del progressbar cargaré un formulario destino (el ke kiero abrir) y desde el progressbar cargaré las ciudades, tengo el tiempo final que son 75 segundos pero el problema viene ahora, realmente no lo hace como debería; cuando finaliza los 75 segundos y le digo ke muestre el nuevo formulario, se tira un rato hasta que lo abre con todo cargado.

Mi pregunta es, hay alguna forma de ejecutar en segundo plano el formulario destino que vaya cargando a la vez ke cargo el progressbar? o hay alguna otra forma de configurar el progressbar.

Espero respuesta y si no me he explicado bien ke alguien me diga y rectifico un poco ya que suena algo complejo.
  #2 (permalink)  
Antiguo 16/05/2009, 15:30
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: ProgressBar y C#

Puedes usar Hilos para controlar los subprocesos secundarios al momento de ejecutar el progressbar y usar el delegate y invoke para poder controlar los objetos a modificar ya q estos no pueden ser accedible desde los Hilos (Thread)
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 16/05/2009, 15:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: ProgressBar y C#

Y un ejemplo así de código para citarlo, ya que nunca he usado el delegate ni invoke al menos para modificar objetos de otro formulario en segundo plano.
  #4 (permalink)  
Antiguo 16/05/2009, 18:19
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: ProgressBar y C#

Uso de Delegados y Invoke
http://social.msdn.microsoft.com/For...b-65f01b94984e
http://www.codeproject.com/KB/cs/delegates-part1.aspx
http://www.codeproject.com/KB/cs/csharpdelegate15.aspx

Uso de Hilos
http://www.codeproject.com/KB/threads/Threading.aspx
http://www.codeproject.com/KB/threads/csharp.aspx
http://www.codeproject.com/KB/cs/Asy...nvocation.aspx
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 17/05/2009, 06:48
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: ProgressBar y C#

He mirado de usar Thread como bien indicabas, hacerlo lo hace bien pero me he dado cuenta que es ínfimo el tiempo al insertar los datos en la cbx cuando el tiempo que tarda realmente es cuando hace el form.showdialog() (dónde se encuenta ya el cbx cargado)

He visto que el Thread sólo funciona en caso de métodos pero no con eventos, de otra forma el delegate e invoke no veo que controle lo que es los eventos de carga y muestra.

En resumidas cuentas, cargo el combobox con los datos, pero el problema viene al hacer el form.showdialog() que tarda pero no sé como controlar el tiempo en el que empieza mostrar y termina por aparecer el form.
  #6 (permalink)  
Antiguo 17/05/2009, 09:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: ProgressBar y C#

Después de muchos quebraderos de cabeza, al fin lo he conseguido pero de otra forma sin usar thread.

Copio código y explico por si alguien más necesita ayuda sobre este tema:

public partial class Progreso : Form
{
Base_de_Datos_FormulaDataContext db = new Base_de_Datos_FormulaDataContext();
private int id_categoria;



public Progreso(int id_categoria)
{
this.id_categoria = id_categoria;
InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{

timer1.Stop();
mostrar_formulario();
}

private void mostrar_formulario()
{
Insertar_Equipo formu = new Insertar_Equipo(id_categoria, this);
formu.ShowDialog();

}

private void Progreso_Load(object sender, EventArgs e)
{
timer1.Start();

}
}

Basícamente este es el código del formulario "Progreso" que es donde se haya el progressbar y todo lo referente al estado de carga del segundo formulario dónde se hayará el cbx con los datos, al hacer la carga inicio un timer que el tick está puesto en 2 segundos (basícamente hago esto para que muestre el formulario este antes de que llame al segundo formulario, si no no se muestra)

Al entrar en el tick se va al método "mostrar_formulario()" dónde crea un nuevo objeto del formulario Insertar_equipo el cual le pasa un id (cosa ke tiene ke ver para mi a la hora de insertar datos) y el this (el formulario este en cuestión)

public partial class Insertar_Equipo : Form
{
Progreso formu;
public Teams teams = new Teams();
private int id_categoria;
private Boolean equipo_insert_mod = false;
private int id_equipo;
Base_de_Datos_FormulaDataContext db = new Base_de_Datos_FormulaDataContext();

public Insertar_Equipo(int id_categoria, int id_equipo, Progreso formu)
{
this.id_categoria = id_categoria;
this.id_equipo = id_equipo;
InitializeComponent();
}

public Insertar_Equipo(int id_categoria,Progreso formu)
{
this.id_categoria = id_categoria;
this.formu = formu;
InitializeComponent();
}


public void cargar_ciudades()
{
var ciudades = from o in db.vista_ciudades_paises orderby o.Country, o.City select o;
int cont = 0;

foreach (vista_ciudades_paises x in ciudades)
{
cbx_ciudad.Items.Add(x.Country + ", " + x.City);
cont = cbx_ciudad.Items.Count;
formu.barra.Value = cont;
}

}

private void Insertar_Equipo_Load(object sender, EventArgs e)
{

cargar_ciudades();
formu.Close();

}
}

Ya en el segundo form, hace el load y carga las ciudades en el cbx, el maximun del progressbar estaba establecido 129606 que son el nº de registros de la consulta por tanto cada pasada del foreach le pasado el count a la barra para que esta vaya creciendo, una vez acabado el foreach procederá a hacer el close del form anterior teniendo ya todos los datos cargados.

Gracias por vuestra ayuda y espero ke pueda ayudar a alguien con esto!
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:21.