thread progressBar in WinForms – Also in C#

Después de una interesante conversación entorno a las diferencias de lenguaje “entre VB i C#” con mi amigo Jose María y de frente a la reiterativa discusión sobre la sintaxis… aquí os dejo el último ejemplo en C# para que lo comparéis con su anterior en VB.


Realmente pensáis que hay tanta diferencia como para continuar discutiendo cual mejor?, para poder apreciar los matices de cada uno de los lenguajes, como mínimo uno tiene que ser “bilingüe” y practicante pues en otro caso la discusión esta fuera de criterio…


El debate está servido! Jajajaja!. 


 


using System;
using System.Windows.Forms;
using System.Threading;
 
namespace ThreadProgressBar
{
    public partial class frmMain : Form
    {
        System.Timers.Timer tmr = new System.Timers.Timer(1000);
        delegate void myDeleg(Form toClose);
        Form currentPrgBar = null;
        Boolean createPrgBar = false;
        Boolean disposePrgBar = false;
 
        public frmMain()
        {
            InitializeComponent();
        }
 
        /// When form load
        private void frmMain_Load(object sender, EventArgs e)
        {
            tmr.Elapsed += tmr_Elapsed;
            tmr.Interval = 100;
            tmr.Start();
        }
 
        /// When running button is presed
        private void simulateLoad(object sender, EventArgs e)
        {
            createPrgBar = true;
            btnRunning.Text = "Load in progress";
            for (int i = 0; i < 10000; i++)
            {
                btnRunning.Text = "Running loop :" + i.ToString();
                btnRunning.Refresh();
                Application.DoEvents();
            }
            btnRunning.Text = "Run New Loop";
            disposePrgBar = true;
        }
 
        /// watch if any process are running to create a new progress bar
        void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (createPrgBar & (currentPrgBar == null))
            {
                Thread myThread = new Thread(onFlyProgressBar);
                myThread.Start();
                createPrgBar = false;
            }
            else
            {
                if (disposePrgBar)
                {
                    closeForm(currentPrgBar);
                    disposePrgBar = false;
                }
            }
        }
 
        /// Create new 'processing' progressBar
        void onFlyProgressBar()
        {
            Label lblMessage = new Label 
            {
                Dock = DockStyle.Top,
                Text = "Procesing, please wait..",
                TextAlign = System.Drawing.ContentAlignment.MiddleCenter,
                Font = new System.Drawing.Font("Microsoft Sans Serif"14,
                                                System.Drawing.FontStyle.Bold,
                                                System.Drawing.GraphicsUnit.Point)                                                
            };
 
            ProgressBar prgBar = new ProgressBar
            {
                Height = 15,
                Dock = DockStyle.Bottom,
                Style = ProgressBarStyle.Marquee
            };
 
            currentPrgBar = new Form()
            {         
                Width = 300, Height = 50,
                StartPosition = FormStartPosition.CenterScreen,
                ControlBox = false,
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D
            };
            currentPrgBar.Controls.AddRange(new Control[] { lblMessage, prgBar });
            currentPrgBar.LostFocus += recoverFocus;
            Application.Run(currentPrgBar);
        }
 
        void recoverFocus(object sender, EventArgs e)
        {
            currentPrgBar.TopMost = true;
        }
 
        /// Make current prgBar topmost if lost focus
        void closeForm(Form toClose)
        {
            if (toClose == nullreturn;
            if (toClose.InvokeRequired)
            {
                toClose.Invoke(new myDeleg(closeForm), toClose);
            }
            else
            {
                toClose.Close();
                currentPrgBar = null;
            }
        }
    }
}




Que tengáis una excelente semana!
PepLluis,

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>