C#线程运用基础

ThreadStart ts=new ThreadStart(a.f);//ThreadStart 是一个委托,用以关联a.f方法
Thread th=new Thread (ts);//Thread是一个类,实例化对象时调用的构造函数参数为ts这个委托对象

th.Start();//线程开始

线程的同步控制:
1.使用ManualResetEvent类,将该类的对象设置为无信号状态(Reset()方法)或有信号状态(Set()方法)。WaitOne()方法阻止当前线程运行,直到收
到ManualResetEvent类对象发送的信息为有信号。将被视为一体的语句序列(执行过程中不允许其他线程读写共享数据)置于Reset()和Set()方法之间即为

“线程的加锁”。

2.使用AutoResetEvent类的方式与上述方式略有差别,在此不详细介绍。

线程池

        实际上是一种线程管理器,由ThreadPool类提供的方法来维护线程。线程池可以简单地理解为存放线程的容器。线程池中存放若干线程,当有任务要执行

的时候,从线程池中唤醒一个线程,令它执行该任务;任务执行完毕后,重新将线程放回线程池(而不是销毁),并令其处于休眠状态。这样,就不需要对线程
进行创建和销毁操作,从而节省时间并使系统更加稳定。
ThreadPool.QueueUserWorkItem(new WaitCallback(a.f),object)利用线程池,无须显式创建线程,只需将要完成的任务写成函数,然后将其作为参数通过

WaitCallback代理对象传递给QueueUserWorkItem()方法即可,而后由线程池自动建立,管理,运行相应的线程。

线程对控件的访问
在多线程编程设计中,不允许一个线程访问在另一个线程中创建的对象。但在许多应用中,恰恰要这么做。使用Contral类提供的Invoke()方法可以解决这一
问题。Invoke()方法可以调用窗体界面线程(主线程)中的任何一个委托对象,原型如下:
Invoke(new f(g),new object[]{})//f()是一个委托,这个委托关联的g方法中有对主线程中控件的操作,方法g的参数写在object对象数组中。



有关线程常用的一些方法和属性:
1.Abort()方法用于终止线程;
2.IsBackground属性有两个值,true和false,指示线程为后台线程或者是前台线程;
3.线程的优先级由Thread类的Priority属性来设置,值集是一个枚举,即Lowest,BelowNormal,Normal,AboveNormal,Highest
    eg:th.Priority=ThreadPriority.Lowest;

文章出自:https://blog.csdn.net/ye_hong/article/details/41395231

原文地址:https://www.cnblogs.com/hyshareex/p/9370480.html