zoukankan      html  css  js  c++  java
  • C#多线程代码

    C# Thread Demo;

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace BackAndForThread
    {
        /// <summary>
        /// Leo.wl
        /// 北京.昌平 2011.4.30
        /// </summary>
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                InitializeMyBackGroundWorkComponent();
            }
            /// <summary>
            /// 初始化后台工作者(BackgroundWorker)是执行异步操作
            /// </summary>
            private void InitializeMyBackGroundWorkComponent()
            {
                this.backgroundWorkerObj = new System.ComponentModel.BackgroundWorker();
                // backgroundWorkerObj
                this.backgroundWorkerObj.RunWorkerCompleted +=
                    new System.ComponentModel.RunWorkerCompletedEventHandler(
                      this.backgroundWorkerObj_RunWorkerCompleted);
            }
           
             /// <summary>
             /// 代理实现异步调用以设置TextBox控件text属性
             /// </summary>
             /// <param name="text">string value</param>
            delegate void SetTextCallback(string text);
            /// <summary>
            /// 此线程用来演示线程安全和非安全两种方式来调用一个windows窗体控件
            /// </summary>
            private Thread demoThread = null;
            /// <summary>
            /// 此后台工作者(BackgroundWorker)用来演示执行异步操作的首选方式
            /// </summary>
            private BackgroundWorker backgroundWorkerObj;
    
            #region Thread Unsafe
            //此事件句柄创建一个ie线程以非安全方式调用一个windows窗体控件
            private void setTextUnsafeBtn_Click(object sender, EventArgs e)
            {
                this.demoThread = new Thread(new ThreadStart(this.ThreadProcUnsafe));
                this.demoThread.Start();
            }
    
            /// <summary>
            /// 此方法在工作者线程执行并且对TextBox控件作非安全调用
            /// </summary>
    		private void ThreadProcUnsafe()
            {
                this.txtResult.Text += "This text was set unsafely.";
            }
            #endregion
    
            #region Thread Safe
            //此事件句柄创建一个以线程安全方式调用windows窗体控件的线程
            private void setTextSafeBtn_Click(object sender, EventArgs e)
            {
                this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
                this.demoThread.Start();
            }
            /// <summary>
            /// 此方法在工作者线程执行并且对TextBox控件作线程安全调用
            /// </summary>
            private void ThreadProcSafe()
            {
                this.SetText("This text was set safely.");
            }
            /// <summary>
            /// 此方法演示一个对windows窗体控件作线程安全调用的模式
            /// 如果调用线程和创建TextBox控件的线程不同,这个方法创建
            /// 代理SetTextCallback并且自己通过Invoke方法异步调用它
            /// 如果相同则直接设置Text属性
            /// </summary>
            /// <param name="text">值</param>
            private void SetText(string text)
            {
                // InvokeRequired需要比较调用线程ID和创建线程ID
                // 如果它们不相同则返回true
                if (this.txtResult.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText);
                    this.Invoke(d, new object[] { text });
                }
                else
                {
                    this.txtResult.Text += text;
                }
            }
    
            #endregion 
            
            #region BackgroundWorker是执行异步操作的首选方式
            // 此事件句柄通过调用RunWorkerAsync开启窗体的BackgroundWorker
            // 当BackgroundWorker引发RunworkerCompleted事件的时候TextBox
            // 控件的Text属性被设置
            private void setTextBackgroundWorkerBtn_Click(object sender, EventArgs e)
            {
                this.backgroundWorkerObj.RunWorkerAsync();
            }
    
            // 此事件句柄设置TextBox控件的Text属性,它在创建TextBox控件的线程
            // 中被调用,所以它的调用是线程安全的
            // BackgroundWorker是执行异步操作的首选方式
            private void backgroundWorkerObj_RunWorkerCompleted(
            object sender,
            RunWorkerCompletedEventArgs e)
            {
                this.txtResult.Text += "This text was set safely by BackgroundWorker.";
            }
            #endregion
    
        }
    }
    

  • 相关阅读:
    《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
    Item 8:析构函数不要抛出异常 Effective C++笔记
    Eclipse经常使用快捷键
    多人即时战斗游戏服务端系列[2]--90坦克Online游戏对象介绍以及渲染机制
    STM8S awu及看门狗IWDG WWDG应用(转)
    使用STM8SF103 ADC采样电压(转)
    BHS-STM32工具系列
    STM32 FLASH模拟EEPROM 使用和优化(转)
    STM32+NRF24L01无线(转)
    像51一样操作STM32的IO(转)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2033231.html
Copyright © 2011-2022 走看看