线程生命周期(来源 w3cschool)

  1. 未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。
  2. 就绪状态:当线程准备好运行并等待 CPU 周期时的状况。
  3. 不可运行状态
    • 已经调用 Sleep 方法
    • 已经调用 Wait 方法
    • 通过 I/O 操作阻塞
  4. 死亡状态:当线程已完成执行或已中止时的状况。

Thread 常用方法:

  • public void Interrupt()    中断处于 WaitSleepJoin 线程状态的线程。
  • public void Join()         在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止为止。
  • public void Start()        开始一个线程
  • public static void Sleep(int millisecondsTimeout)    让线程暂停一段时间

一 普通线程

分为两种,一种是不需要给子线程传参数,Thread t = new Thread(new ThreadStart(void () target)); 另一种是要给子线程传一个参数,Thread t = new Thread(new ParameterizedThreadStart(void (object) target));

  1 // 普通线程
  2 private void btn1_Click(object sender, EventArgs e)
  3 {
  4 	progressBar.Value = 0;
  5 	Thread tt = new Thread(new ThreadStart(DoWork1));
  6 	tt.Name = "不带参数普通线程";
  7 	tt.Start();
  8 	Thread t = new Thread(new ParameterizedThreadStart(DoWork2));
  9 	t.Name = "带参数普通线程";
 10 	t.IsBackground = true;
 11 	t.Start(100);
 12 	_msg += "当前线程的执行状态:" + t.IsAlive + "\r\n";
 13 	_msg += "当前托管线程的唯一标识:" + t.ManagedThreadId + "\r\n";
 14 	_msg += "线程名称:" + t.Name + "\r\n";
 15 	_msg += "当前线程的状态:" + t.ThreadState;
 16 	MessageBox.Show("消息:\r\n" + _msg, "提示", MessageBoxButtons.OK);
 17 }
 18 // 线程方法
 19 private void DoWork1()
 20 {
 21 	for (int i = 0; i < 100; i++)
 22 	{
 23 		// 跨线程访问 UI,BeginInvoke 采用异步委托
 24 		progressBar.BeginInvoke(new EventHandler((sender, e) =>
 25 		{
 26 			progressBar.Value = i;
 27 		}), null);
 28 	}
 29 }
 30 // 线程方法
 31 private void DoWork2(object obj)
 32 {
 33 	for (int i = 0; i < (int)obj; i++)
 34 	{
 35 		progressBar.BeginInvoke(new EventHandler((sender, e) =>
 36 		{
 37 			progressBar.Value = i;
 38 		}), null);
 39 	}
 40 }
 41 
普通线程

相关文章:

  • 2021-07-26
  • 2021-06-25
  • 2021-11-06
  • 2022-01-02
  • 2021-07-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-28
  • 2022-03-01
  • 2021-09-12
  • 2021-08-21
相关资源
相似解决方案