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;
}
}
Related examples in the same category