全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

C#中有哪些办法用多线程,能将文件内的元素按指定顺序输出?

发布时间:2023-10-11 06:52:18
发布人:xqq

一、C#中用多线程的方法

1、Thread类

使用Thread类通过ThreadStart(无参数)或ParameterizedThreadStart(一个输入参数)类型的委托创建一个Thread对象,开启一个新线程,执行该委托传递的任务,此时线程尚未处于运行状态。

调用Start()函数启动线程,当前线程继续执行。

调用Join()函数可以阻塞当前线程,直到调用Join()的线程终止。

调用Abort()方法,如需中止线程,在调用该方法的线程上抛出ThreadAbortException异常,以结束该线程

可以通过Thread.ResetAbort()方法阻止线程的中止。

2、线程池

ThreadPool类维护一个线程的列表,提供给用户以执行不同的小任务,减少频繁创建线程的开销。

该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。

线程池其实就是一个存放线程对象的“池子(pool)”,他提供了一些基本方法,如:设置pool中最小/最大线程数量、把要执行的方法排入队列等等。ThreadPool是一个静态类,因此可以直接使用,不用创建对象。

3、parallel类

Parallel.For()方法类似于 C#的 for循环语旬,也是多次执行一个任务。

使用Parallel.For()方法,可以并行运行迭代。

迭代的顺序没有定义,不能保证。

在For()方法中:

前两个参数定义了循环的开头和结束。示例从0迭代到 9。

第 3个参数是一个Action委托

是要并行运行迭代的方法

整数参数是循环的迭代次数,该参数被传递给Action委托引用的方法。

Parallel.For()方法的返回类型是ParalleLoopResult结构,它提供了循环是否结束的信息。

4、task类

相比于Thread类,Task类为控制线程提供了更大的灵活性。

Task类可以获取线程的返回值可以定义连续的任务:在一个任务结束结束后开启下一个任务可以在层次结构中安排任务,在父任务中可以创建子任务
这样就创建了一种依赖关系,如果父任务被取消,子任务也随之取消

5、background类

C#提供了BackgroundWorker控件帮助用户更简单、安全地实现多线程运算。

该控件提供了DoWork, ProgressChanged 和 RunWorkerCompleted事件

为DoWork添加事件处理函数,再调用RunWorkerAsync()方法,即可创建一个新的线程执行DoWork任务

ProgressChanged和RunWorkerCompleted事件均在UI线程中执行,添加相应的处理函数,即可完成任务线程与UI线程间的交互,可用于显示任务的执行状态(完成百分比)、执行结果等。

同时,该控件还提供了CancleAsync()方法,以中断线程的执行

需注意的是,调用该方法后,只是将控件的CancellationPending属性置True,用户需在程序执行过程中查询该属性以判定是否应中断线程。

具体用法可参考MSDN:BackgroundWorker用法范例

可以看的出来,BackgroundWorker组件提供了一种执行异步操作(后台线程)的同时,并且还能妥妥的显示操作进度的解决方案。

延伸阅读:

二、任务Task和线程Thread的区别

任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。

任务跟线程不是一对一的关系。比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。

Task和Thread一样,位于System.Threading命名空间下。

#it技术干货

相关文章

Linux内核链表有什么好处?

Linux内核链表有什么好处?

2023-10-11
为何顺序存储结构较链表更加方便查找?

为何顺序存储结构较链表更加方便查找?

2023-10-11
p->next->next是什么意思?

p->next->next是什么意思?

2023-10-11
抽象数据类型和面向对象是什么关系?

抽象数据类型和面向对象是什么关系?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取