0
点赞
收藏
分享

微信扫一扫

C#线程

一、通过委托开启一个线程

C#线程_异步线程



当方法需要参数的时候(使用Action委托)

C#线程_后台线程_02



当方法需要参数并具有返回值的时候(需要使用Func委托)

C#线程_异步线程_03

C#线程_后台线程_04

取得异步线程的返回值方式

C#线程_异步线程_05

控制线程的检测频率——笨办法——采用轮询机制

C#线程_线程池_06

通过等待句柄检测——缺点是需要提前设置好等待时长

C#线程_后台线程_07

检测线程状态——常规方式——消息回调机制(注意回调函数的参数是固定的,必须按照这个格式写)

C#线程_后台线程_08

如果需要获得异步线程的返回值,只需要加上BeginInvoke最后一个参数即可

C#线程_后台线程_09


C#线程_线程池_10





二、通过Thread类开启一个线程

C#线程_后台线程_11


C#线程_线程池_12

可以将上图的方式改成直接使用Lambda表达式的方式:

C#线程_异步线程_13


传递参数——在线程函数中声明object类型的形参,实例化线程的方式跟上面一样,但在开启线程的时候需要在Start里面传递所需要的参数:

C#线程_异步线程_14


C#线程_线程池_15



通过自己创建类,开启线程:

C#线程_线程池_16


C#线程_后台线程_17


三、前台线程与后台线程

C#线程_后台线程_18

默认创建的线程都是前台线程,除非使用线程池或者将默认创建的前台线程手动设置成后台线程。后台线程会在主程序结束时就立即结束,而前台线程则会牵制主线程的进行,致使主线程会一直等待所有的前台线程执行完毕再结束。

C#线程_异步线程_19


C#线程_线程池_20


C#线程_异步线程_21

线程池

C#线程_后台线程_22

一般线程池内执行的都是小任务;用线程池创建出来的线程默认情况下都是后台线程!

C#线程_异步线程_23

C#线程_异步线程_24

C#线程_后台线程_25

注意!(1)已入线程池中的线程是没法被设成前台线程的!!!(2)不能修改线程池中线程的优先级或名称!!!(3)入池的线程只适合做一些事件开销小的任务!!!


四、通过任务的方式开启线程

C#线程_异步线程_26

开启任务的第一种方式

C#线程_线程池_27

开启任务的第二种方式

C#线程_线程池_28

连续任务

C#线程_异步线程_29


C#线程_线程池_30


C#线程_后台线程_31


五、线程资源管理/线程争用/线程之间抢资源

C#线程_后台线程_32

C#线程_后台线程_33

C#线程_线程池_34

抢资源的事情由此产生,使用线程锁/lock来解决:

C#线程_异步线程_35

为了防止死锁产生,需要在编程的开始阶段设计好锁的具体顺序并在之后的开发中忠于这个顺序进行加锁。








作者:艾孜尔江



举报

相关推荐

0 条评论