发布时间:2018-06-15编辑:佚名阅读(1997)
ThreadStart是一个无参的、返回值为void的委托。委托定义如下:
public delegate void ThreadStart();
通过ThreadStart委托创建并运行一个线程:
class Program { static void Main(string[] args) { //创建无参的线程 Thread thread1 = new Thread(new ThreadStart(Thread1)); //调用Start方法执行线程 thread1.Start(); Console.ReadKey(); } /// <summary> /// 创建无参的方法 /// </summary> static void Thread1() { Console.WriteLine("这是无参的方法"); } }
ParameterizedThreadStart是一个有参的、返回值为void的委托,定义如下:
public delegate void ParameterizedThreadStart(Object obj);
class Program { static void Main(string[] args) { //通过ParameterizedThreadStart创建线程 Thread thread = new Thread(new ParameterizedThreadStart(Thread1)); //给方法传值 thread.Start("这是一个有参数的委托"); Console.ReadKey(); } /// <summary> /// 创建有参的方法 /// 注意:方法里面的参数类型必须是Object类型 /// </summary> /// <param name="obj"></param> static void Thread1(object obj) { Console.WriteLine(obj); } }
注意:ParameterizedThreadStart委托的参数类型必须是Object的。如果使用的是不带参数的委托,不能使用带参数的Start方法运行线程,否则系统会抛出异常。但使用带参数的委托,可以使用thread.Start()来运行线程,这时所传递的参数值为null。
namespace MultiThreadDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //定义回调 private delegate void setTextValueCallBack(int value); //声明回调 private setTextValueCallBack setCallBack; private void btn_Test_Click(object sender, EventArgs e) { //实例化回调 setCallBack = new setTextValueCallBack(SetValue); //创建一个线程去执行这个方法:创建的线程默认是前台线程 Thread thread = new Thread(new ThreadStart(Test)); //Start方法标记这个线程就绪了,可以随时被执行,具体什么时候执行这个线程,由CPU决定 //将线程设置为后台线程 thread.IsBackground = true; thread.Start(); } private void Test() { for (int i = 0; i < 10000; i++) { //使用回调 textBox1.Invoke(setCallBack, i); } } /// <summary> /// 定义回调使用的方法 /// </summary> /// <param name="value"></param> private void SetValue(int value) { this.textBox1.Text = value.ToString(); } } }
上一篇:C# list
0人
0人
1人
0人