C#线程、多线程、线程池、后台线程

System.Threading 命名空间

System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口。 除同步线程活动和数据访问的类(Monitor、Interlocked、AutoResetEvent 等)之外,此命名空间还包含一个 ThreadPool 类(它使用户能够使用系统提供的线程池)和一个 Timer 类(在线程池线程上执行回调方法)。 除了 System.Threading 命名空间中提供的功能之外,BackgroundWorker 类还提供一个简单的基于事件的方法,以同步对主应用程序线程的访问。

 

 

 

Thread 类

一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。 托管线程的执行单位是方法。 使用 ThreadStart 委托或 ParameterizedThreadStart 委托可以指定由线程执行的方法。 使用 ParameterizedThreadStart 委托可以将数据作为参数传递到线程过程。

您不需要自己创建线程。 BackgroundWorkerThreadPool 类使您可以通过一种面向任务的简单方式来使用系统管理的后台线程。 对于将结果返回用户界面 (UI) 线程的后台任务,最简单的编程方法是使用 BackgroundWorker 类。 下表列出了有关各种并发编程的一些信息来源。

任务

请参见

执行使用事件来与主应用程序线程通信的后台任务。

BackgroundWorker

执行不需要与主应用程序线程通信的后台任务。

托管线程池

保护代码或字段区域,使其不被并发访问。

Monitor;Visual Basic SyncLock 语句(在 C# 中为 lock 语句)

同步多个线程的活动。

EventWaitHandle、AutoResetEvent 和 ManualResetEvent

按固定的时间间隔在后台执行代码。

Timer

按固定的时间间隔在 UI 线程上执行代码。

DispatcherTimer

提供对数据的无锁并发访问。

互锁操作

创建您自己的线程。

Thread 类;启动时创建线程并传递数据

 

 

ThreadPool 类

提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。线程池通过为应用程序提供一个由系统管理的辅助线程池,使您可以更为有效地使用线程。 一个线程监视排到线程池的若干个等待操作的状态。 当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的每个进程都有一个线程池。 线程池的默认大小为:每个处理器 250 个辅助线程,再加上 1000 个 I/O 完成线程。

 

 

BackgroundWorker 类

在单独的线程上运行操作。

BackgroundWorker 类允许您在单独的专用线程上运行操作。 诸如下载和数据库事务这样的耗时操作会导致用户界面停止响应。 如果您需要能进行响应的用户界面,而且必须执行耗时操作,则可以使用 BackgroundWorker 类方便地解决问题。

若要在后台运行操作,请创建一个 BackgroundWorker。 可以侦听报告操作进度并在操作完成时发出信号的事件。

若要设置后台操作,请为 DoWork 事件添加事件处理程序。 在此事件处理程序中调用耗时的操作。 若要启动后台操作,请调用 RunWorkerAsync 方法。 若要收到进度更新的通知,请处理 ProgressChanged 事件。 若要在操作完成时收到通知,请处理 RunWorkerCompleted 事件。

说明:

您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。 而应该通过 ProgressChangedRunWorkerCompleted 事件与用户界面进行通信。

如果后台操作需要参数,请在调用 RunWorkerAsync 时给出参数。 在 DoWork 事件处理程序内部,可以从 DoWorkEventArgs.Argument 属性中提取该参数。

有关 BackgroundWorker 的更多信息,请参见如何:使用后台辅助线程

 

c#的ThreadPool使用笔记(一)

http://www.cnblogs.com/sashow/archive/2007/02/08/644679.html

 

c#的ThreadPool使用笔记(二)

http://www.cnblogs.com/sashow/archive/2007/02/08/645016.html

 

C#多线程

http://blog.csdn.net/ILOVEMSDN/article/details/1735495

 

ThreadPool(线程池) in .Net

http://www.cnblogs.com/rickie/archive/2004/11/23/67275.html

posted on 2012-04-11 11:49  linzheng  阅读(4466)  评论(0编辑  收藏  举报

导航