//------------------------------------------------------------------------------ /// <copyright from='1997' to='2001' company='Microsoft Corporation'> /// Copyright (c) Microsoft Corporation. All Rights Reserved. /// /// This source code is intended only as a supplement to Microsoft /// Development Tools and/or on-line documentation. See these other /// materials for detailed information regarding Microsoft code samples. /// /// </copyright> //------------------------------------------------------------------------------ namespace Microsoft.Samples.Windows.Forms.Cs.ProgressBarCtl { using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Threading;
// <doc> // <desc> // This class demonstrates the ProgressBar control. // The ProgressBar is updated periodically via another thread based on the // settings in this control // </desc> // </doc> // public class ProgressBarCtl : System.Windows.Forms.Form {
private System.ComponentModel.Container components; protected internal System.Windows.Forms.Label label3; protected internal System.Windows.Forms.Label lblCompleted; protected internal System.Windows.Forms.TrackBar sldrSpeed; protected internal System.Windows.Forms.ProgressBar progbar; protected internal System.Windows.Forms.Label label5; protected internal System.Windows.Forms.GroupBox grpBehavior; protected internal System.Windows.Forms.Label label4; protected internal System.Windows.Forms.Label label6; protected internal System.Windows.Forms.Label lblValue; protected internal System.Windows.Forms.ComboBox cmbStep;
private int iSleepTime ; private Thread timedProgress ;
public ProgressBarCtl() : base() { // // Required for Win Form Designer support // InitializeComponent();
// // TOD Add any constructor code after InitializeComponent call // iSleepTime = 100 ; cmbStep.SelectedIndex = 0 ; progbar.Step = 1 ;
}
protected override void OnLoad(EventArgs e) { // Spin off a new thread to update the ProgressBar control timedProgress = new Thread(new ThreadStart(TimedProgressProc)); timedProgress.IsBackground = true; timedProgress.Start(); }
// <doc> // <desc> // This code executes on the Windows.Forms thread. // </desc> // </doc> // private void UpdateProgress() { int min ; double numerator, denominator, completed ;
//Reset to start if required if (progbar.Value == progbar.Maximum) { progbar.Value = progbar.Minimum ; } else { progbar.PerformStep(); }
lblValue.Text = progbar.Value.ToString();
min = progbar.Minimum ; numerator = progbar.Value - min ; denominator = progbar.Maximum - min ; completed = (numerator / denominator) * 100.0 ;
lblCompleted.Text = Math.Round(completed).ToString() + "%" ; }
// <doc> // <desc> // This function runs in the timedProgress thread and updates the // ProgressBar on the form. // </desc> // </doc> // private void TimedProgressProc() { try { MethodInvoker mi = new MethodInvoker(UpdateProgress); while (true) { Invoke(mi); int iSleepTime = this.SleepTime; Thread.Sleep(iSleepTime) ; } } //Thrown when the thread is interupted by the main thread - exiting the loop catch (ThreadInterruptedException e) { if (e != null) {} } catch (Exception we) { if (we != null) { MessageBox.Show(we.ToString()); } } }
// <doc> // <desc> // Property controlling the progress of the progress bar - used by the background thread // </desc> // </doc> // private int SleepTime { get { lock(this) { return iSleepTime ; } } set { lock(this) { iSleepTime = value ; } } }
/// <summary> /// Clean up any resources being used /// </summary> public override void Dispose() { /* * We have to make sure that our thread doesn't attempt * to access our controls after we dispose them. */ if (timedProgress != null) { timedProgress.Interrupt(); timedProgress = null; }
base.Dispose(); components.Dispose(); }
protected void sldrSpeed_Scroll(object sender, EventArgs e) { TrackBar tb = (TrackBar) sender ; int time = 110 - tb.Value ; this.SleepTime = time ; }
protected void cmbStep_SelectedIndexChanged(object sender, EventArgs e) { try { progbar.Step = Int32.Parse((string)cmbStep.SelectedItem); } catch (Exception ex) { // thrown if Int32.Parse can't convert if (ex !=null) {} } }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor /// </summary> private void InitializeComponent() { this.lblValue = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.progbar = new System.Windows.Forms.ProgressBar(); this.grpBehavior = new System.Windows.Forms.GroupBox(); this.cmbStep = new System.Windows.Forms.ComboBox(); this.label3 = new System.Windows.Forms.Label(); this.sldrSpeed = new System.Windows.Forms.TrackBar(); this.label6 = new System.Windows.Forms.Label(); this.lblCompleted = new System.Windows.Forms.Label(); this.grpBehavior.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.sldrSpeed)).BeginInit(); this.SuspendLayout(); // // lblValue // this.lblValue.Location = new System.Drawing.Point(164, 93); this.lblValue.Name = "lblValue"; this.lblValue.Size = new System.Drawing.Size(72, 18); this.lblValue.TabIndex = 4; // // label4 // this.label4.Location = new System.Drawing.Point(20, 93); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(288, 18); this.label4.TabIndex = 0; this.label4.Text = "Completion Speed:"; // // label5 // this.label5.Location = new System.Drawing.Point(31, 65); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(143, 28); this.label5.TabIndex = 1; this.label5.Text = "Percent Completed:"; // // progbar // this.progbar.BackColor = System.Drawing.SystemColors.Control; this.progbar.Location = new System.Drawing.Point(31, 28); this.progbar.Name = "progbar"; this.progbar.Size = new System.Drawing.Size(245, 18); this.progbar.Step = 1; this.progbar.TabIndex = 0; this.progbar.Text = "progbar"; // // grpBehavior // this.grpBehavior.Controls.AddRange(new System.Windows.Forms.Control[] { this.cmbStep, this.label3, this.sldrSpeed, this.label4}); this.grpBehavior.Location = new System.Drawing.Point(317, 19); this.grpBehavior.Name = "grpBehavior"; this.grpBehavior.Size = new System.Drawing.Size(318, 175); this.grpBehavior.TabIndex = 5; this.grpBehavior.TabStop = false; this.grpBehavior.Text = "ProgressBar"; // // cmbStep // this.cmbStep.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStep.DropDownWidth = 123; this.cmbStep.Items.AddRange(new object[] { "1", "5", "10", "20"}); this.cmbStep.Location = new System.Drawing.Point(174, 28); this.cmbStep.Name = "cmbStep"; this.cmbStep.Size = new System.Drawing.Size(123, 20); this.cmbStep.TabIndex = 7; this.cmbStep.SelectedIndexChanged += new System.EventHandler(this.cmbStep_SelectedIndexChanged); // // label3 // this.label3.Location = new System.Drawing.Point(20, 28); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(62, 18); this.label3.TabIndex = 6; this.label3.Text = "Step:"; // // sldrSpeed // this.sldrSpeed.BackColor = System.Drawing.SystemColors.Control; this.sldrSpeed.Location = new System.Drawing.Point(20, 111); this.sldrSpeed.Maximum = 100; this.sldrSpeed.Minimum = 10; this.sldrSpeed.Name = "sldrSpeed"; this.sldrSpeed.Size = new System.Drawing.Size(277, 42); this.sldrSpeed.TabIndex = 1; this.sldrSpeed.TabStop = false; this.sldrSpeed.Text = "trackBar1"; this.sldrSpeed.TickFrequency = 10; this.sldrSpeed.Value = 10; this.sldrSpeed.Scroll += new System.EventHandler(this.sldrSpeed_Scroll); // // label6 // this.label6.Location = new System.Drawing.Point(31, 93); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(128, 18); this.label6.TabIndex = 3; this.label6.Text = "Value:"; // // lblCompleted // this.lblCompleted.Location = new System.Drawing.Point(164, 65); this.lblCompleted.Name = "lblCompleted"; this.lblCompleted.Size = new System.Drawing.Size(72, 18); this.lblCompleted.TabIndex = 2; // // ProgressBarCtl // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(647, 202); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.grpBehavior, this.lblValue, this.label6, this.lblCompleted, this.label5, this.progbar}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ProgressBarCtl"; this.Text = "ProgressBar"; this.Load += new System.EventHandler(this.ProgressBarCtl_Load); this.grpBehavior.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.sldrSpeed)).EndInit(); this.ResumeLayout(false);
}
// The main entry point for the application. [STAThread] public static void Main(string[] args) { Application.Run(new ProgressBarCtl()); }
private void ProgressBarCtl_Load(object sender, System.EventArgs e) {
}
}
}