using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private Thread fThread = null; private System.ComponentModel.Container components = null; public Form1() { this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout(); this.progressBar1.Location = new System.Drawing.Point(24, 32); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(264, 23); this.progressBar1.TabIndex = 0; this.button1.Location = new System.Drawing.Point(24, 80); this.button1.Size = new System.Drawing.Size(136, 40); this.button1.Text = "Start Thread"; this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Location = new System.Drawing.Point(168, 80); this.button2.Size = new System.Drawing.Size(120, 40); this.button2.Text = "Stop Thread"; this.button2.Click += new System.EventHandler(this.button2_Click); this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(704, 429); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button2, this.button1, this.progressBar1}); this.ResumeLayout(false); } protected override void Dispose(bool disposing) { if (fThread != null) { fThread.Interrupt(); fThread = null; } } [STAThread] static void Main() { Application.Run(new Form1()); } private void UpdateProgress() { if (progressBar1.Value == progressBar1.Maximum) { progressBar1.Value = progressBar1.Minimum; } progressBar1.PerformStep(); } public void ThreadProc() { try { MethodInvoker mi = new MethodInvoker(this.UpdateProgress); while (true) { this.BeginInvoke(mi); Thread.Sleep(500); } } catch (ThreadInterruptedException e) { Console.WriteLine( "Interruption Exception in Thread: {0}", e); } catch (Exception we) { Console.WriteLine("Exception in Thread: {0}", we); } } private void button1_Click(object sender, System.EventArgs e) { fThread = new Thread(new ThreadStart(ThreadProc)); fThread.IsBackground = true; fThread.Start(); } private void button2_Click(object sender, System.EventArgs e) { fThread.Interrupt(); fThread = null; } }