创建线程(Background Thread)的N种方式
来源:互联网 发布:招商银行看盘软件下载 编辑:程序博客网 时间:2024/04/29 12:22
原文地址:http://www.cnblogs.com/xchit/p/3425542.html
第一、Thread类
Thread类是实例化线程的主要方法;一个Thread实例管理一个线程,即执行序列。通过简单实例化一个对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。
Thread thread = new Thread(_ => BackgroundMethod("第一、Thread类创建线程")); thread.Start(); thread.Join();
第二、ThreadPool(线程池)类
提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。
ThreadPool.QueueUserWorkItem(_ => BackgroundMethod("第二、ThreadPool创建线程"));
第三、delegate(委托)
委托异步回调方法创建线程,只需调用BeginInvoke委托和触发线程。然后,调用EndInvoke将阻塞当前线程。
BackgroundMethodDelegate x = new BackgroundMethodDelegate(BackgroundMethod); IAsyncResult a = x.BeginInvoke("第三、delegate委托", null, null); x.EndInvoke(a);
第四、BackgroundWorker类
在单独线程上执行操作
BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate { BackgroundMethod("第四、BackGroundWorker创建线程"); }; worker.RunWorkerAsync();
第五、System.Threading.Timer
创建一个计时器,提供以指定时间间隔执行方法机制。
Timer timer = new System.Threading.Timer(_ => BackgroundMethod("第五、Timer计时器"), null, 0, Timeout.Infinite);
第六、Task类
最简单的任务异步操作
using (Task task = new Task(() => BackgroundMethod("第六、Task类创建异步任务"))) { task.Start(); task.Wait(); }
第七、Task.Factory(Task另外一种创建方式)
创建实例工厂的访问
Task.Factory.StartNew(() => BackgroundMethod("第七、Task第二种创建异步方式"));
第八、Parallel类
System.Threading.Tasks命名空间下的,提供对并行循环和区域支持
Parallel.Invoke(() => BackgroundMethod("第八、Parallel类"));
第九、System.Reactive.Linq.Observable
Reactive Extensions 概要
Reactive Extensions (下面简称 Rx) 是在 Linq 可操作的数据源上针对 "异步"(BeginXXX/EndXXX) 和 "事件"(XXXCompleted) 上的扩展,也可以被称为 "Linq To Asynchronous" 和 " Linq To Events"。相比以前复杂的异步处理或者事件处理,Timer的处理等,结合Linq 形式的Rx编程模型更加简洁。
关于 Rx 的安装,可以通过 Reactive Extensions (Rx) 的主页 的直接下载安装,当然也可以利用 NuGet 导入 dll (http://nuget.org/packages/Rx-Main) [译注: NuGet 是VS集成的在线 dll部署工具,非常方便]。Rx 不管是 Installer 还是 NuGet 安装的,都有 Stable(稳定版) 和 Experimental(实验版) 两种。
Observable.Return("第九、Observable类", Scheduler.Default).Subscribe(BackgroundMethod);
第十、ProcessStartInfo类
指定启动进程时使用的一组值,严格上应该不处于创建线程这一栏,但已被建议作为一种方式在后台做一些事情,即使它没有资格作为一个后台线程。 (根据定义,一个后台线程是进程中的一个线程不会防止进程终止,而它仍然在运行。 )
ProcessStartInfo startInfo = new ProcessStartInfo("StartThreads.exe", "OutOfProcess"); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.RedirectStandardOutput = true; Process process = Process.Start(startInfo); Console.WriteLine(“第十:ProcessStartInfo”); process.WaitForExit();
测试源码地址:http://files.cnblogs.com/xchit/StartThreads.rar
- 创建线程(Background Thread)的N种方式
- 线程THread的俩种创建方式
- Thread线程之 创建线程的三种方式
- Thread线程-创建线程的3种方式
- Thread线程的两种创建方式的传递过程
- Runnable和Thread两种方式创建线程的比较
- 线程Thread的两种创建方式以及区别
- multithreading--创建Thread线程的第二种方式,Runnable
- Java线程总结(一):创建线程的两种方式Thread和Runnable
- 创建线程的方式一:继承Thread类
- 创建线程的第一种方式:继承Thread…
- 线程的第一种创建方式继承Thread
- 线程Thread 创建方式 容易混淆的概念
- multithreading--创建Thread线程的第一种方式
- 通过继承Thread类的方式创建两个线程
- java 多线程(一)---创建线程的三种方式Thread,Runnable,Callable与Future
- 创建子线程的两种方式:类实现runnable接口或是类继承Thread类
- boost::thread线程创建方式总结
- 设置eclipse控制台上的信息输入到某个文件
- 在git commit前,频繁的git add可能会产生不必要的悬空(dangling)对象
- static静态代码块与非静态代码块 + 构造函数
- 语音数字信号处理技术应用 --- 创新点头脑风暴
- td超出宽度隐藏用点显示的问题
- 创建线程(Background Thread)的N种方式
- 流形学习
- KVM 分析系列一kvm的结构
- 制作mkdown电子书编译环境
- 整理基础知识
- RedHat5 开启telnet,ftp等服务
- 半个小时移植Flash游戏到Android平台
- maven项目在eclipse tomcat正常运行
- 跨平台Cocos2dx 工具开发 (一) 特效编辑器