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

Hilos e ImageList

Estas en el tema de Hilos e ImageList en el foro de .NET en Foros del Web. Hola a tod@s!!! estoy haciendo una aplicación en C# la cual es un muestrario de productos (imagen y descripción), debo mostrar gran cantidad de productos ...
  #1 (permalink)  
Antiguo 27/10/2010, 05:39
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Hilos e ImageList

Hola a tod@s!!!

estoy haciendo una aplicación en C# la cual es un muestrario de productos (imagen y descripción), debo mostrar gran cantidad de productos (unos 500) en el menor tiempo posible. Para ello decidí cargar todas las imágenes de los productos en un ImageList para manejarlos más rápidamente ( a lo mejor es una locura lo que estoy diciendo, porque puede que consuma demasiados recursos).

Para no tener que esperar a que carguen todas las imágenes en el ImageList, decidí lanzar esa tarea en un hilo a parte, así la ejecución del programa principal no se vería bloqueda.

Pues bien, mi problema es el siguente:

- CASO 1: si comienzo a visualizar los productos desde el programa principal (hilo pricipal) antes de que el hilo secundario haya terminado de cargarlos todos en el ImageList, empiezo a observar que no ha cargado los productos en el orden correcto (según los va recuperando de la BD), hay algunos productos intercalados alterando el orden natural de la secuencia. Además compruebo que en cada ejecucíon el orden varía, no es siemrpe el mismo.

- CASO 2: si espero a que el hilo secundario termine de cargar todos los productos en el ImageList antes de empezar a mostrarlos en el hilo principal, una vez finalizada la carga, el hilo principal se bloquea (de hecho casi todo el ordenador se bloquea), si lo dejo un rato vuelve a responder toscamente, puede ser debido que son muchas imágenes las que manipula. Sin embargo en el CASO 1 el programa NO SE BLOQUEA y está gestionando el mismo volumen de datos.

Dejo el código a continuación


Código:
//Clase secundaria que recupera las imágenes de la BD
//y las almacena en un ImageList
class RellenarImagenes
    {
        private ImageList im;
        //Constructor
        public RellenarImagenes()
        {
            im = new ImageList();
            this.im.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
            this.im.ImageSize = new System.Drawing.Size(256, 150);
            this.im.TransparentColor = System.Drawing.Color.Transparent;
        }
         //Devuelve el ImageList
         public ImageList devuelveImageList()
        {
            return this.im;
        }
        
        //Rellena el ImageList con las fotos de los productos de la BD
        public void rellenaImageList()
        {
            
            String strSQL = "SELECT * FROM xxxImagenes";
            OleDbConnection cnn = new OleDbConnection();
            cnn.ConnectionString = cadenaConexion;
            cnn.Open();
            OleDbCommand sentencia = new OleDbCommand(strSQL, cnn);
            OleDbDataReader objReader = sentencia.ExecuteReader();

            while (objReader.Read())
            {
                Image imagen = new Bitmap(objReader[1].ToString());
                im.Images.Add(imagen);
            }
            
        }
    }//Fin Clase RellenarImagenes


//Este metodo se encuentra dentro de la clase principal, es el que crea el 
//hilo secundario para llamar al metodo de rescatar las imagenes de la BD y
//meterlas en el el ImageList
        private void cargaImageList()
        {
            //Instanciamos la clase
            RellenarImagenes ri = new RellenarImagenes();
            //Asignamos el ImageList devuelto a el atributo ImageList de la 
            //clase principal.
            this.imageList1 = ri.devuelveImageList();
            //Lanzamos el nuevo hilo.
            Thread th = new Thread(new ThreadStart(ri.rellenaImageList));
            th.Start(); 
        }

No se que hacer para que me muestre las imagenes en el orden correcto, a lo mejor eso de cargar todas las imagenes de golpe en un ImageList es una mala soloción.

Muchas Gracias por anticipado, a lo mejor es un poco lioso, si algo no entienden, no duden en preguntar.
  #2 (permalink)  
Antiguo 27/10/2010, 06:41
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Hilos e ImageList

Si todas tus imagenes vienen desde la bd me parece que hay viene el problema del tiempo que tarda en cargarlas, si son muchas seria mejor que las guardes en un folder y en la bd solo su ruta
__________________
http://geekswithblogs.net/jaullo/Default.aspx
Si te he ayudado regalame Karma positivo!!!
  #3 (permalink)  
Antiguo 27/10/2010, 09:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Hilos e ImageList

Perdón si me he explicado mal, las imágenes están almacenadas en un directorio, lo que guardo en la BD es solo la ruta, aún así tarda bastante porque son muchas fotos que almacenar en el ImageList supongo.

Lo que no entiendo es por qué no me las guarda en el orden que las va recuperando de la BD.

Etiquetas: hilo, imagelist
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 09:47.