Mega Code Archive

 
Categories / C# / GUI Windows Form
 

Starting and stopping a 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.Button button1;     private System.Windows.Forms.Button button2;     private System.Windows.Forms.Label label1;     private System.Windows.Forms.Label label2;     private System.Windows.Forms.Label NumThreads;     private System.Windows.Forms.Label Counter;     private int fCounter;     private ArrayList fThreadList;     private System.ComponentModel.Container components = null;     public Form1() {         InitializeComponent();         fThreadList = new ArrayList();     }     protected override void Dispose(bool disposing) {         if (disposing) {             if (components != null) {                 components.Dispose();                 for (int i = 0; i < fThreadList.Count; ++i) {                     Thread fThread = (Thread)fThreadList[i];                     fThread.Abort();                 }             }         }         base.Dispose(disposing);     }     private void InitializeComponent() {         this.button1 = new System.Windows.Forms.Button();         this.button2 = new System.Windows.Forms.Button();         this.label1 = new System.Windows.Forms.Label();         this.label2 = new System.Windows.Forms.Label();         this.NumThreads = new System.Windows.Forms.Label();         this.Counter = new System.Windows.Forms.Label();         this.SuspendLayout();         this.button1.Location = new System.Drawing.Point(32, 104);         this.button1.Name = "button1";         this.button1.TabIndex = 0;         this.button1.Text = "&Start";         this.button1.Click += new              System.EventHandler(this.button1_Click);         this.button2.Location = new System.Drawing.Point(136, 104);         this.button2.Name = "button2";         this.button2.Size = new System.Drawing.Size(88, 24);         this.button2.TabIndex = 1;         this.button2.Text = "&Stop";         this.button2.Click += new              System.EventHandler(this.button2_Click);         this.label1.Location = new System.Drawing.Point(32, 40);         this.label1.Name = "label1";         this.label1.Size = new System.Drawing.Size(152, 16);         this.label1.TabIndex = 2;         this.label1.Text = "Number of Threads Running:";         this.label2.Location = new System.Drawing.Point(32, 64);         this.label2.Name = "label2";         this.label2.Size = new System.Drawing.Size(100, 16);         this.label2.TabIndex = 3;         this.label2.Text = "Counter:";         this.NumThreads.Location = new System.Drawing.Point(192, 40);         this.NumThreads.Name = "NumThreads";         this.NumThreads.Size = new System.Drawing.Size(64, 16);         this.NumThreads.TabIndex = 4;         this.Counter.Location = new System.Drawing.Point(192, 64);         this.Counter.Name = "Counter";         this.Counter.Size = new System.Drawing.Size(64, 16);         this.Counter.TabIndex = 5;         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);         this.ClientSize = new System.Drawing.Size(272, 165);         this.Controls.AddRange(new System.Windows.Forms.Control[] {         this.Counter,         this.NumThreads,         this.label2,         this.label1,         this.button2,         this.button1});         this.ResumeLayout(false);     }     [STAThread]     static void Main() {         Application.Run(new Form1());     }     protected void ThreadFunc() {         Boolean done = false;         while (!done) {             Thread.Sleep(1000);             fCounter++;             this.Counter.Text = fCounter.ToString();         }     }     private void button1_Click(object sender, System.EventArgs e) {         Thread fThread = new Thread(new ThreadStart(ThreadFunc));         fThread.Start();         fThreadList.Add(fThread);         this.NumThreads.Text = fThreadList.Count.ToString();     }     private void button2_Click(object sender, System.EventArgs e) {         Thread fThread = (Thread)fThreadList[fThreadList.Count - 1];         fThread.Abort();         fThreadList.Remove(fThread);         this.NumThreads.Text = fThreadList.Count.ToString();     } }