C#学习笔记-Thread多线程和跨线程访问

线程(Thread)

线程(Thread)是进程中的基本执行单元

多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。

多线程实际上是通过时间片的间隔来完成的。

线程的内部数据结构:线程的ID、想成的环境(会在Cpu的寄存器中占用空间)

操作系统会默认分配1MB的空间给用户堆栈,用于局部变量和参数值传递,如果在创建一个线程时,使用了死循环,可能会造成堆栈异常,引发异常。

线程的时间开销:资源使用通知的开销、时间片切换的开销

在使用多线程时,不能随意的去开启或创建线程,这样可能会对程序的性能会有一定的影响,要考虑程序的性能问题,不是线程越多越好,满足程序要求的线程,才能有效的提高程序性能。

线程(Thread)开启的方式

线程的生命周期:开启 start()、暂停/挂起suppend()、继续Resume()、中断Interrupt()、终止Abort() 等待join()

                Thread thread = new Thread(() =>
                  {
                  //这里编写的线程要处理的逻辑
                  Console.WriteLine("正在运行的线程id:" + 
                  Thread.CurrentThread.ManagedThreadId);

                  });
                thread.IsBackground = true;//设置线程为后台线程
                thread.Start();//启动线程
                Thread.Sleep(300);//设置事件间隔

通过ThreadState这个枚举来判断线程的状态

 if (thread.ThreadState == ThreadState.Running ||
     thread.ThreadState == ThreadState.WaitSleepJoin)
 {
     thread.Suspend();
 }

线程等待join(),使用了join方法的线程会被先执行,再去执行其他线程的逻辑和主线程的逻辑

 Thread thread = new Thread(() =>
 {
    //这里编写的线程要处理的逻辑
    Console.WriteLine("正在运行的线程id:" + Thread.CurrentThread.ManagedThreadId);

     });
    thread.IsBackground = true;//设置线程为后台线程
    thread.Start();//启动线程
    thread.Join();
    Thread.Sleep(300);//设置事件间隔 
 }

跨线程访问控件

Thread跨线程访问控件,可以通过Invoke方法访问到不同线程创建的控件,InvokeRequired判断是否有跨线程请求。

Thread thread = new Thread(() => {

 if (label2.InvokeRequired)
 {
   label2.Invoke(new Action<string>(date => { label2.Text = date; }),"abc");
 }
            
 });
 thread.IsBackground = true;
  thread.Start();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值