Starting and stopping a thread. : Thread and UI « GUI Windows Form « C# / C Sharp






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();

    }
}

 








Related examples in the same category

1.Talking to a visual element in a background thread.
2.Background processing in a thread.
3.Thread and UI Demo