zoukankan      html  css  js  c++  java
  • C#如何进行多线程编程

    由于多线程编程非常复杂,这个小例子只能算是一个入门线的知识点吧

    首先建一个应用程序项目,命名为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(1438);
                
    this.btnStart.Name = "btnStart";
                
    this.btnStart.Size = new System.Drawing.Size(7523);
                
    this.btnStart.TabIndex = 0;
                
    this.btnStart.Text = "启动";
                
    this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
                
    // 
                
    // btnStop
                
    // 
                this.btnStop.Location = new System.Drawing.Point(1468);
                
    this.btnStop.Name = "btnStop";
                
    this.btnStop.Size = new System.Drawing.Size(7523);
                
    this.btnStop.TabIndex = 1;
                
    this.btnStop.Text = "停止";
                
    this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
                
    // 
                
    // button1
                
    // 
                this.button1.Location = new System.Drawing.Point(1497);
                
    this.button1.Name = "button1";
                
    this.button1.Size = new System.Drawing.Size(7523);
                
    this.button1.TabIndex = 3;
                
    this.button1.Text = "关闭";
                
    this.button1.Click += new System.EventHandler(this.button1_Click);
                
    // 
                
    // textBox1
                
    // 
                this.textBox1.Location = new System.Drawing.Point(1411);
                
    this.textBox1.Name = "textBox1";
                
    this.textBox1.Size = new System.Drawing.Size(7521);
                
    this.textBox1.TabIndex = 4;
                
    this.textBox1.Text = "200";
                
    // 
                
    // lblResult
                
    // 
                this.lblResult.AutoSize = true;
                
    this.lblResult.Location = new System.Drawing.Point(12139);
                
    this.lblResult.Name = "lblResult";
                
    this.lblResult.Size = new System.Drawing.Size(2312);
                
    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(104164);
                
    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,点击开始按钮,标签为动态增长,点击停止可以暫停程序的执行。
  • 相关阅读:
    Winform中用了皮肤控件之后,报错:容量超出了最大容量 参数名:capacity
    C# 生成二维码
    T-sql语句修改数据库逻辑名、数据库名、物理名
    ASP.NET MVC中使用jQuery时的浏览器缓存问题
    关于asp.net页面缓存
    关于VS 工具箱灰色,不可用的解决方案
    Android
    如何让一个DIV水平,垂直方向都居中于浏览器?
    cookie.setPath()的用法
    CSS选择器
  • 原文地址:https://www.cnblogs.com/huyong/p/2685635.html
Copyright © 2011-2022 走看看