Mega Code Archive

 
Categories / C# / GUI Windows Form
 

Talking to a visual element in a background thread

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;     } }