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

Uso de "Timer" en lugar de "Thread.Sleep" C#

Estas en el tema de Uso de "Timer" en lugar de "Thread.Sleep" C# en el foro de .NET en Foros del Web. Buenas tardes a todos en el foro, tengo un pequeño sistema de publicidad, en el cual guardo las rutas de unas imágenes en un arreglo ...
  #1 (permalink)  
Antiguo 12/04/2016, 16:40
 
Fecha de Ingreso: abril-2016
Ubicación: México
Mensajes: 5
Antigüedad: 8 años
Puntos: 0
Exclamación Uso de "Timer" en lugar de "Thread.Sleep" C#

Buenas tardes a todos en el foro, tengo un pequeño sistema de publicidad, en el cual guardo las rutas de unas imágenes en un arreglo y posteriormente recorro dicho arreglo y muestro las imágenes. Para poder visualizar la imágen de cada arreglo he usado el Thread.Sleep, todo funciona perfecto a excepción de los archivos con extensión (.gif). Ya que según un usuario este evita que se reproduzca y habría que cambiarlo por un timer. He probado con diferentes videos y no funciona mi código con el uso del timer (no se si sea porque recorro un arreglo o me falte declarar una librería) . Esperaba que alguien aqui pudiera ayudarme. Les dejo mi codigo para que observen donde coloque los Thread.Sleep, se supone que solo debo poner el código y ya o cómo?

Código:
 // Obtiene la ruta del exe del programa (guardarlo en variable path)
            string path = System.IO.Path.GetDirectoryName(
            System.AppDomain.CurrentDomain.BaseDirectory);

            // Comprueba si el directorio "Media" existe en donde se encuentra el ejecutable previamente obtenido.
            string miDirectorio = @path + @"\Media";
            
            // Si existe no hace nada y si no existe crea la carpeta
            if (!Directory.Exists(miDirectorio))
            Directory.CreateDirectory(miDirectorio);

            // Se realiza una lectura de archivos jpg, png y gif en la carpeta Media. Todas las rutas se almacenan en arreglos.
            string lecturadearchivos = @miDirectorio;

            // Arreglo de archivos jpg
            string[] ficheros = Directory.GetFiles(lecturadearchivos, "*.jpg");
            // Arreglo de archivos png
            string[] ficheros2 = Directory.GetFiles(lecturadearchivos, "*.png");
            // Arreglo de archivos gif
            string[] ficheros3 = Directory.GetFiles(lecturadearchivos, "*.gif");


            // Se hace el recorrido del arreglo ficheros (jpg). 
            foreach (string ruta in ficheros)
            {
                // Y se muestran las imagenes contenidas en dicho arreglo.
                pictureBox1.Image = Image.FromFile(ruta);

                //Hago una pausa para que puedan ver la imagen
                Thread.Sleep(1000);
                Application.DoEvents();
            }


            // Se hace el recorrido del arreglo ficheros2 (png). 
            foreach (string ruta2 in ficheros2)
            {
                // Y se muestran las imagenes contenidas en dicho arreglo.
                pictureBox1.Image = Image.FromFile(ruta2);

                //Hago una pausa para que puedan ver la imagen
                Thread.Sleep(1000);
                Application.DoEvents();
            }


            // Se hace el recorrido del arreglo ficheros3 (gif). 
            foreach (string ruta3 in ficheros3)
            {
                // Y se muestran las imagenes contenidas en dicho arreglo.
                pictureBox1.Image = Image.FromFile(ruta3);
                
                //Hago una pausa para que puedan ver la imagen
                Thread.Sleep(1000);
                Application.DoEvents();
            }   
        }
  #2 (permalink)  
Antiguo 12/04/2016, 17:15
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Uso de "Timer" en lugar de "Thread.Sleep" C#

Si no existe el directorio, crearlo no sirve de nada ya que estará vacío y no encontrará imagenes así que es mejor salir del método.

Además repites demasiado código. De entrada yo haría algo así:

Código:
// Obtiene la ruta del exe del programa (guardarlo en variable path)
            string path = System.IO.Path.GetDirectoryName(
            System.AppDomain.CurrentDomain.BaseDirectory);
            List<string> imageExtensions = new List<string>() { ".jpg", ".gif", ".png" };
            
            // Comprueba si el directorio "Media" existe en donde se encuentra el ejecutable previamente obtenido.
            string miDirectorio = @path + @"\Media";
            
            // Si existe no hace nada y si no existe crea la carpeta
            if (!Directory.Exists(miDirectorio)) return;

            // Se realiza una lectura de archivos de imagen de la carpeta Media. 
            List<string> ficheros = new List<string>();
            foreach(string extension in imageExtensions)
            { 
                      ficheros.AddRange(Directory.GetFiles(lecturadearchivos, extension));
            }

            // Se hace el recorrido del arreglo ficheros (jpg). 
            foreach (string fichero in ficheros)
            {
                // Y se muestran las imagenes contenidas en dicho arreglo.
                pictureBox1.Image = Image.FromFile(fichero);

                //Hago una pausa para que puedan ver la imagen
                Thread.Sleep(1000);
                Application.DoEvents();
            }
        }
Igualmente yo quizás lo plantearía diferente. Al arrancar construyes el array con las imagenes. Y con un timer vas recorriendo la lista de imágenes, una en cada "tick". Así no haces un Thread.Sleep y no bloqueas al thread.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 12/04/2016, 17:20
 
Fecha de Ingreso: abril-2016
Ubicación: México
Mensajes: 5
Antigüedad: 8 años
Puntos: 0
Busqueda Respuesta: Uso de "Timer" en lugar de "Thread.Sleep" C#

Hola gracias por lo de simplificar mi código definitivamente es menos que lo que yo puse. Apenas voy iniciando con este lenguaje tan genial.
Pero mi duda es precisamente eso, cómo colocar un timer? y lo peor.. que código lleva o donde va y así. Como te digo probe con algunos ejemplos y no me funciona. Ni siquiera a que te refieres con lo de tick x.x! perdón por la ignorancia.

Etiquetas: c#
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 23:06.