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

 
Vista:
sin imagen de perfil

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

Publicado por Antonio (3 intervenciones) el 13/04/2016 00:42:49
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?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 // 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();
            }
        }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

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

Publicado por Mario Amezcua (11 intervenciones) el 18/04/2016 21:42:49
Hola Antonio,


Cuando usas Thread.Sleep() detienes la ejecucion de todos los eventos del hilo principal, es por eso que no vas a poder ver la animacion. Lo que necesitas hacer sin cambiar mucho tu codigo es mover las operaciones donde recorres el tus arrays a un nuevo thread ese nuevo thread lo puedes detener sin problemas y no vas a afectar al thread principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
private void MuestraImagenes()
  {
   this.Invoke(this.ShowProgressGifDelegate);
   System.Threading.Thread.Sleep(5000);
   this.Invoke(this.HideProgressGifDelegate);
  }
 
  private void Main()
  {
   ThreadStart myThreadStart = new ThreadStart(MuestraImagenes);
   Thread myThread = new Thread(myThreadStart);
   myThread.Start();
  }

ShowProgressGifDelegate tendria el codigo para llegar al picturebox y mostrar el gif

Espero que te sea de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar