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控件的线程检测
}
/// <summary>
/// 修改文本框的内容
/// </summary>
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中标记开启线程
}
}
}