Visual CSharp .NET - Ayuda Tasks, Paralelo, segundo plano

 
Vista:
sin imagen de perfil
Val: 21
Ha disminuido 1 puesto en Visual CSharp .NET (en relación al último mes)
Gráfica de Visual CSharp .NET

Ayuda Tasks, Paralelo, segundo plano

Publicado por Juan (8 intervenciones) el 29/08/2019 17:26:25
Hola tengo el siguiente codigo, lo que hace es buscar una imagen de un catalogo y todas las que encuentre como coincidencia las empiezo a pasar en un picture, con un retraso de 2 segundos cambiándola y repitiendo
el proceso infinitamente algo asi como un gif, el problema es que la ventana hace mas cosas como llenar un formulario, uso Application.DoEvents(); que me ayuda, aun así no te permite moverle a nada hasta que cambia la imagen por la siguiente o de forma intermitente, se que con paralelismo o tasks se puede hacer que uno llene el formulario sin que se detenga la app cada que cambia la imagen, no se como implementarlo, si alguien puede ayudarme...


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
private void Carrousel_Imagenes()
{
 
    var list_Image = new List<string>();
    string[] list_Images = new string[] { };
    try
    {
        // Only get files that begin with the letter "c".
 
        string[] dirs = Directory.GetFiles(@"F:\SYS2004\catalogo\", "" + cbo_Modelo.Text + "*");
 
        foreach (string dir in dirs)
        {
            list_Image.Add(dir);
        }
 
        while (1 == 1)
        {
            Application.DoEvents();
            foreach (string s in list_Image)
            {
                Application.DoEvents();
                Thread.Sleep(2000);
                if (System.IO.File.Exists(@"" + s + ""))
                {
                    pictureBox_Foto.Image = Image.FromFile(@"" + s + "");
                }
 
            }
 
        }
 
    }
    catch (Exception exp)
    {
        MessageBox.Show("Error: " + exp.Message);
    }
 
    //_------------------------------------------------------------------------------------------
}
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
Imágen de perfil de Wilfredo Patricio Castillo
Val: 92
Oro
Ha mantenido su posición en Visual CSharp .NET (en relación al último mes)
Gráfica de Visual CSharp .NET

Ayuda Tasks, Paralelo, segundo plano

Publicado por Wilfredo Patricio Castillo (46 intervenciones) el 31/08/2019 03:33:50
Prueba con un backgroundworker que es lo mas facil para tí.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo
Val: 32
Ha mantenido su posición en Visual CSharp .NET (en relación al último mes)
Gráfica de Visual CSharp .NET

Ayuda Tasks, Paralelo, segundo plano

Publicado por Leonardo (8 intervenciones) el 09/10/2019 20:24:58
Puedes utilizar Thread.Task, que es mucho más efectivo y rápido que BackgroundWorker y ña propia Clase Threads.

Prueba este código con una clase que se ejecuta en segundo plano hasta que descargues el formulario.:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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.IO;
using System.Threading;
using System.Threading.Tasks;
 
namespace carrusel
{
    public partial class Form1 : Form
    {
 
        TASKCarrusel banner;
 
        public Form1() { InitializeComponent(); }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            /* AQUI TU CÓDIGO */
 
            banner = new TASKCarrusel();
 
            /* AQUI MÁS CÓDIGO DEL RESTO DE TU APLICACIÓN */
 
        }
 
        private void closeForm(object sender, FormClosingEventArgs e)
        {
            banner.Dispose();
 
            /* AQUÍ MÁS CÓDIGO TUYO */
        }
    }
 
 
    public class TASKCarrusel
    {
        #region Variables
        protected FileInfo[] files;
        protected CancellationTokenSource tokenSource;
        protected CancellationToken token;
        #endregion
 
        #region Constructor
        public TASKCarrusel()
        {
            tokenSource = new CancellationTokenSource();
            token = tokenSource.Token;
            Task hilo = Task.Factory.StartNew(() => carrusel(token), token);
        }
        public void Dispose() { tokenSource.Cancel(); }
        #endregion
 
        #region Carga de Ficheros
        protected void carrusel(CancellationToken cancela)
        {
            var list_Image = new List<string>();
            string[] list_Images = new string[] { };
            try
            {
                // Only get files that begin with the letter "c".
 
                string[] dirs = Directory.GetFiles(@"F:\SYS2004\catalogo\", "" + cbo_Modelo.Text + "*");
 
                foreach (string dir in dirs)
                {
                    list_Image.Add(dir);
                }
 
                while (1 == 1)
                {
                    Application.DoEvents();
                    foreach (string s in list_Image)
                    {
                        Application.DoEvents();
                        Thread.Sleep(2000);
                        if (System.IO.File.Exists(@"" + s + ""))
                        {
                            pictureBox_Foto.Image = Image.FromFile(@"" + s + "");
                        }
 
                    }
 
                }
 
            }
            catch (Exception exp)
            {
                MessageBox.Show("Error: " + exp.Message);
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar