由于多线程编程非常复杂,这个小例子只能算是一个入门线的知识点吧
首先建一个应用程序项目,命名为ThreadExample,在窗体上放一个文本框(textBox1) ,一个标签(lblResult),再放两个按钮,分别命名为btnStart、btnStop。
窗体代码:
namespace ThreadExample { partial class ThreadExample { /**/ /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null ; /**/ /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing"> true if managed resources should be disposed; otherwise, false. </param> protected override void Dispose( bool disposing) { if (disposing && (components != null )) { components.Dispose(); } base .Dispose(disposing); } Windows Form Designer generated code #region Windows Form Designer generated code /**/ /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this .btnStart = new System.Windows.Forms.Button(); this .btnStop = new System.Windows.Forms.Button(); this .button1 = new System.Windows.Forms.Button(); this .textBox1 = new System.Windows.Forms.TextBox(); this .lblResult = new System.Windows.Forms.Label(); this .SuspendLayout(); // // btnStart // this .btnStart.Location = new System.Drawing.Point( 14 , 38 ); this .btnStart.Name = " btnStart " ; this .btnStart.Size = new System.Drawing.Size( 75 , 23 ); this .btnStart.TabIndex = 0 ; this .btnStart.Text = " 启动 " ; this .btnStart.Click += new System.EventHandler( this .btnStart_Click); // // btnStop // this .btnStop.Location = new System.Drawing.Point( 14 , 68 ); this .btnStop.Name = " btnStop " ; this .btnStop.Size = new System.Drawing.Size( 75 , 23 ); this .btnStop.TabIndex = 1 ; this .btnStop.Text = " 停止 " ; this .btnStop.Click += new System.EventHandler( this .btnStop_Click); // // button1 // this .button1.Location = new System.Drawing.Point( 14 , 97 ); this .button1.Name = " button1 " ; this .button1.Size = new System.Drawing.Size( 75 , 23 ); this .button1.TabIndex = 3 ; this .button1.Text = " 关闭 " ; this .button1.Click += new System.EventHandler( this .button1_Click); // // textBox1 // this .textBox1.Location = new System.Drawing.Point( 14 , 11 ); this .textBox1.Name = " textBox1 " ; this .textBox1.Size = new System.Drawing.Size( 75 , 21 ); this .textBox1.TabIndex = 4 ; this .textBox1.Text = " 200 " ; // // lblResult // this .lblResult.AutoSize = true ; this .lblResult.Location = new System.Drawing.Point( 12 , 139 ); this .lblResult.Name = " lblResult " ; this .lblResult.Size = new System.Drawing.Size( 23 , 12 ); this .lblResult.TabIndex = 5 ; this .lblResult.Text = " 0/0 " ; // // ThreadExample // this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this .ClientSize = new System.Drawing.Size( 104 , 164 ); this .Controls.Add( this .lblResult); this .Controls.Add( this .textBox1); this .Controls.Add( this .button1); this .Controls.Add( this .btnStop); this .Controls.Add( this .btnStart); this .Name = " ThreadExample " ; this .Text = " Form1 " ; this .ResumeLayout( false ); this .PerformLayout(); } #endregion private System.Windows.Forms.Button btnStart; private System.Windows.Forms.Button btnStop; private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Label lblResult; } } 程序代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace ThreadExample { public partial class ThreadExample : Form { // 声明一个线程 private Thread timerThread; // 声明一个变量,用来存储label值 int count, i = 0 ; public ThreadExample() { InitializeComponent(); } // 把label的值加1; public void AddData() { // 显示lable的值 if (i == count) i = 0 ; this .lblResult.Text = i.ToString() + " / " + count.ToString(); i ++ ; } // 更新线程 public void UpdataThread() { try { // 在对控件的调用方法进行调用时,或需要一个简单委托又不想自己定义时可以使用该委托。 MethodInvoker mi = new MethodInvoker( this .AddData); while ( true ) { // 在创建控件的基础句柄所在线程上异步执行指定的委托 this .BeginInvoke(mi); Thread.Sleep( 50 ); } } catch (ThreadInterruptedException) { // 针对具体问题定制异常抛出显示 } finally { // 做一些处理 } } // 启动线程 public void StartThread() { StopThread(); timerThread = new Thread( new ThreadStart(UpdataThread)); // 获取或设置一个值,该值指示某个线程是否为后台线程。 timerThread.IsBackground = true ; timerThread.Start(); } // 停止线程 public void StopThread() { if (timerThread != null ) { // 中断线程 timerThread.Interrupt(); timerThread = null ; } } // 启动线程,显示结果 private void btnStart_Click( object sender, EventArgs e) { // 调用线程启动函数 count = int .Parse(textBox1.Text); this .StartThread(); } // 停止线程 private void btnStop_Click( object sender, EventArgs e) { // 调用线程停止函数 this .StopThread(); } } } 编译后,运行,在文本框中输入200,点击开始按钮,标签为动态增长,点击停止可以暫停程序的执行。