public partial class Form1 : Form { public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; //关闭窗体的跨线程访问控件 检查 } private void button1_Click(object sender, EventArgs e) { threadfun(); } object obj1 = new object(); void fun() { lock (obj1)//不加锁时,之前的一次循环没结束,也可执行执行下次循环 { for (int i = 0; i < 5000; i++) { textBox1.Text = (int.Parse(textBox1.Text) + 1).ToString(); } } } void funparam(object obj) { object[] o = (object[])obj; MessageBox.Show(o[0].ToString() + " " + o[1].ToString()); } void threadfun() { Thread T1 = new Thread(fun); T1.IsBackground = true; // 1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。 //2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。 //3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。(这样没执行完突然退出不会报错) //4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。 //5、原理:只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。 T1.Start(); Thread T2 = new Thread(fun); T2.IsBackground = true; T2.Start(); Thread T3 = new Thread(fun); T3.IsBackground = true; T3.Start(); Thread T4 = new Thread(funparam); object oblarr = new object[] { "bing", 12 }; T4.IsBackground = true; T4.Start(oblarr); //T4 简写了T5 ParameterizedThreadStart p = new ParameterizedThreadStart(funparam); Thread T5 = new Thread(p); T5.IsBackground = true; T5.Start(oblarr); } }