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 线程学习
{ public partial class Form1 : Form { Thread th; public Form1() { InitializeComponent(); } //单线程的问题 //c#编程创建一个线程会分配程序一个主线程,该线程会用于窗体内各种控件的加载,控制 //当你运行以下程序时会占用主线程,窗口的各种拖动等操作会停止,窗体假死, //前台线程:只有所有的前台程序关闭,才能关闭线程 //后台线程:只有所有的前台程序关闭,后台线程自动结束。private void button1_Click(object sender, EventArgs e)
{ //解决方案 //创建多线程 //并将线程设置为后台线程 th = new Thread(Test);// // Test(); Thread.Sleep(3000);//单位ms,睡眠一段时间 th.IsBackground = true;//标记这个线程就绪
th.Start(); //th.Abort(); //th.Start();//一个线程被终止后不能被重新start;}
private void Test() { int length = 10000; for (int i = 0; i < length; i++) { //Console.WriteLine(i); textBox1.Text = i.ToString();//bug1.net下不允许跨线程的访问 //解决 //bug2主线程关闭后。由于某些原因th这个线程没有关闭, //应该判断这个线程是否null //
}
}private void Form1_Load(object sender, EventArgs e)
{ //取消跨线程的访问 Control.CheckForIllegalCrossThreadCalls = false;//control是所有控件的基类 }private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{ //当你点击关闭窗体时判断th是否null if (th != null) { th.Abort(); } } }}