C#的线程使用

【草稿 有新的再添加】

线程类

System.Threading.Thread 

System.Threading.ThreadPool

System.Threading.Task

 

启动线程

1.new 一个 Thread,传入线程函数,然后Start

//方法一:独立创建线程 Thread 自己创建的独立的线程, 优先级高,需要使用者自己管理。
Thread t = new Thread(ThreadProcess);
t.Start(new object());
//需要手动终止,当然现在终止可能线程还未运行完成,
t.Abort();

2.交给线程池创建线程

线程池 有 .Net 自己管理, 只需要把需要处理的方法写好, 然后交个.Net Framework, 后续只要方法执行完毕, 则自动退出。

ThreadPool.QueueUserWorkItem(ThreadProcess, new object());

3.交给task处理

Task 4.0 以后新增的线程操作方式, 类似 ThreadPool, 但效率测试比ThreadPool略高, Task对多核的支持更为明显,所以在多核的处理器中, Task的优势更为明显。 Task方式创建线程

System.Threading.Tasks.Task.Factory.StartNew(ThreadProcess, new object());

    

线程状态

线程未启动—— new了 但是还没有调用 Start函数
就绪状态—— 调用完Start函数了 等待时间片的到来
不可运行状态—— Thread.Sleep 将线程挂起一定的时间等
死亡状态——m_thread.Abort()终止线程,会抛出一个 ThreadAbortException  异常 


线程结束何时:
    当线程调用Abort终结线程
    当线程函数运行结束,线程自动销毁。


(2)如果是无限循环需要手动销毁

    窗体应用程序的线程间通信

    .net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性。

    线程函数通过委托传递,是一种安全的线程间通信的方式。也是委托的功能之一。

    但C#也可以关闭线程安全保护,自由的调用其他线程生成的控件。只要加上

 

 

线程函数以及线程属性

Thread 类的 CurrentThread

当 C# 程序开始执行时,主线程自动创建。主线程应该是托管函数中,或者库中被创建的。主线程就是进程中第一个被执行的线程称为主线程。vs中看线程窗口,总有一个主线程。还有好多各种dll中线程。
使用 Thread 类创建的线程被主线程的子线程调用。

 在 main 函数中调用,Thread.CurrentThread看看

 

线程的属性 IsBackground —————— 必须在调用Start方法之前设置线程的类型

首先介绍:

.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程后台线程
所有的前台线程运行完应用程序才可以退出;
后台线程可以不考虑其是否已经运行完毕,应用程序可以直接退出,所有的后台线程在应用程序退出时都会自动结束。

在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。
而后台线程是不管自己的这个后台线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止,那后台进程也就结束了。

 

进入正题:

.net环境使用Thread建立的线程默认情况下是前台线程,即线程属性 IsBackground=false

如果设置为后台线程就要显式设置,且必须在调用Start方法之前设置线程的类型。

 

一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。
而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。


Thread.Sleep(100)  vs t.join(100) 的区别

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值