C#线程运用基础
来源:互联网 发布:奉化房产信息网域名 编辑:程序博客网 时间:2024/05/17 22:15
ThreadStart ts=new ThreadStart(a.f);//ThreadStart 是一个委托,用以关联a.f方法
Thread th=new Thread (ts);//Thread是一个类,实例化对象时调用的构造函数参数为ts这个委托对象
1.使用ManualResetEvent类,将该类的对象设置为无信号状态(Reset()方法)或有信号状态(Set()方法)。WaitOne()方法阻止当前线程运行,直到收
到ManualResetEvent类对象发送的信息为有信号。将被视为一体的语句序列(执行过程中不允许其他线程读写共享数据)置于Reset()和Set()方法之间即为
进行创建和销毁操作,从而节省时间并使系统更加稳定。
ThreadPool.QueueUserWorkItem(new WaitCallback(a.f),object)利用线程池,无须显式创建线程,只需将要完成的任务写成函数,然后将其作为参数通过
有关线程常用的一些方法和属性:
1.Abort()方法用于终止线程;
2.IsBackground属性有两个值,true和false,指示线程为后台线程或者是前台线程;
3.线程的优先级由Thread类的Priority属性来设置,值集是一个枚举,即Lowest,BelowNormal,Normal,AboveNormal,Highest
eg:th.Priority=ThreadPriority.Lowest;
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;
0 0
- C#线程运用基础
- c# 线程运用
- C#线程使用基础
- C#之线程基础概述
- c#线程基础之线程控制
- c#线程基础之线程池
- C#中的线程(二) 线程同步基础
- c#线程基础之线程控制
- C#中的线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- C# 线程(二) 线程同步基础
- C#中的线程(二) 线程同步基础
- c# 线程中任务Task的实际运用
- c#线程基础之原子操作
- c#中多线程---线程同步基础
- C#语言 线程基础(2)
- android 应用---引导页
- Struts2注解错误There is no Action mapped for namespace [/].....
- n a^o7 ! (简单字符串处理)
- tableviewcell的一些基本知识点
- 如何在android style文件中使用自定义属性
- C#线程运用基础
- U盘安装Mac os
- Linux常用命令
- Fiddler2介绍
- 随笔
- 机器学习作业 之 logistic regression(programming exercise week 3 )
- 新程序猿——————————起步记录(并且不断更新自己工作遇到的问题)
- Cocos2dx游戏开发笔记21:动手学习《Flappy Bird》之继续优化(付源码)
- Service的生命周期和使用