多线程之TextBox.CheckForIllegalCrossThreadCalls = false;//消除对textbox控件的线程检测

 

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 _03多线程方法重入
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;//消除对textbox控件的线程检测
        }

        ///


        /// 修改文本框的内容
        ///

        void ChangeTxt()
        {
            for (int i = 0; i < 1000; i++)
            {
                int a = int.Parse(textBox1.Text);//取到文本框中的值,已经设置文本框的处置值为0,因为这里使用到UI主线程的
                //创建的TextBox控件的实例textBox1,要想操作这个线程的话就需要在UI线程初始化的时候消除对这个控件的线程检测
                Console.WriteLine(Thread.CurrentThread.Name+",a"+a+",i="+i.ToString());//打印当前线程名字做标记
                a++;
                textBox1.Text = a.ToString();
            }
        }

        //方法重入问题
        private void btnMultiMethod_Click(object sender, EventArgs e)
        {
            //ChangeTxt();//UI线程自己访问可以通过

            Thread th = new Thread(ChangeTxt);//得到一个线程对象
            th.Name="myTh1";
            th.Priority = ThreadPriority.Highest;
            th.IsBackground = true;//把线程设置为后台线程
            th.Start();//在CPU中标记开启线程

            Thread th2 = new Thread(ChangeTxt);//得到一个线程对象
            th2.Priority = ThreadPriority.Normal;
            th2.Name = "myTh2";
            th2.IsBackground = true;//把线程设置为后台线程
            th2.Start();//在CPU中标记开启线程

        }
    }
}

 

你可能感兴趣的:(Winform)