黑马程序员:多线程学习代码
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -----------------------

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Threading;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); TextBox.CheckForIllegalCrossThreadCalls = false; } //单线程循环 private void button1_Click(object sender, EventArgs e) { CountTime(); } /// <summary> /// 循环技术方法 /// </summary> void CountTime() { DateTime beginTime = DateTime.Now; for (int i = 0; i < 999999; i++) { } TimeSpan ts = beginTime.Subtract(DateTime.Now); MessageBox.Show("循环结束" + ts.TotalMilliseconds); } //多线程循环 解决UI卡死问题 private void button2_Click(object sender, EventArgs e) { //创建线程对象 传入要线程执行的方法 Thread threadFrist = new Thread(CountTime); //将线程设置为后台线程(当所有线程结束后,后台线程会自动退出) threadFrist.IsBackground = true; //启动多线程 threadFrist.Start(); } /// <summary> /// 修改文本框里面的内容 /// </summary> void ChangTxt() { for (int i = 0; i < 999; i++) { int a = int.Parse(txtNum.Text); Console.WriteLine(Thread.CurrentThread.Name + ",a=" + a+",i="+i.ToString()); a++; txtNum.Text = a.ToString(); } } //方法重入问题 private void button3_Click(object sender, EventArgs e) { //ChangTxt();//UI线程自己自己访问可以通过 Thread thread = new Thread(ChangTxt); thread.Name = "t1"; thread.IsBackground = true; thread.Start(); Thread thread2 = new Thread(ChangTxt); thread2.Name = "t2"; thread2.IsBackground = true; thread2.Start(); } void ShowTxtName(object name) { if (name != null) MessageBox.Show("name" + name.ToString()); else MessageBox.Show("null"); MessageBox.Show("name="+name.ToString()); } void ShowTxtName2(object name) { if (name != null) MessageBox.Show("name" + name.ToString()); else MessageBox.Show("null"); MessageBox.Show("name=" + name.ToString()); } //多线程执行带参数方法 private void button4_Click(object sender, EventArgs e) { //ParameterizedThreadStart pts = new ParameterizedThreadStart(ShowTxtName); //执行带参数的方法 Thread thread = new Thread(ShowTxtName); thread.IsBackground = true; thread.Start(txtName.Text); } //===执行不带参数== public class MyThread { ThreadStart ts; public MyThread(ThreadStart ts)//要求用户在new的时候传入方法委托 { this.ts = ts;//将委托赋给全局变量 } public void Start() { if (ts != null) ts();//调用委托,执行委托里的犯法 else pts(null); } //===执行带参数=== ParameterizedThreadStart pts; public MyThread(ParameterizedThreadStart pts)//要求用于在new的时候传入方法委托 { this.pts = pts;//将委托赋给全局变量 } public void start() { ts();//调用委托,执行委托里的方法 } } private void button5_Click(object sender, EventArgs e) { } }}--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.nSet