【c#线程学习笔记二:线程的信号发送和工作线程更新UI】



一、前台线程和后台线程

一般情况下,显式创建的线程成为前台线程,线程池中创建的线程默认是后台线程。只要有一个前台线程还在运行,应用程序就仍然保持运行状态,而后台线程则不然。当所有前台线程结束时,应用程序就会停止,且所有的后台线程也随之终止。
可以通过线程的IsBackground属性来查询或修改线程的前后台状态
当前台线程都执行结束时,后台线程随之终止,且后台线程执行栈上的finally语句块都无法执行,如果finally里执行的是清理逻辑等,那么可以在应用程序结束时等待后台线程汇合(Join)来避免前面的问题,不过需要注意的是需要指定一个超时时间,来舍弃那些无法按时完成的后台任务,防止应用程序无法正常关闭。

二、设置线程的优先级

当多个线程同时运行,优先级就会变得很重要,因为有的线程可能需要更低的延迟(能够快速响应),比如一些UI进程,那么可以使用System.Diagnostics命名空间下的Process类来提高进程的优先级:

using(Process p  = Process.GetCurrentProcess())
    p.PriorityClass = ProcessPriorityClass.High;

该方法适用于一些工作量较少的线程,在计算密集,特别是带有用户界面的应用程序中,提高进程的优先级可能会抢占其他进程的执行时间,从而影响整个计算机的运行速度。

三、信号发送

线程间的消息通知即所谓的信号发送。

var signal = new ManualResetEvent(false);
new Thread(() =>
{
   
    Console.WriteLine("等待信号");
    signal.WaitOne()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值