摘要:
系列文章,从一个基本的代码说起,逐步探索 ThreadPool 的奥妙。

在上次的基础上,我需要做以下的事情:
1、要传递给线程的参数更加复杂;
2、线程要处理的工作更加多样;
3、在线程中我要改变主线程传入的参数,并告诉主程序。

好的,第一个问题,因为 WaitCallback 委托的原型决定了参数只能有一个 ( Object state ),那没有办法,我们只能将多个参数封装到一个Object 中,也就是 class 中。
第二个问题,要处理这个问题也很简单,就是再定义一个 WaitCallback 委托的对象,将它作为参数传递给ThreadPool.QueueUserWorkItem ()方法。这个对象可以在线程里面处理另外一类的工作。
代码如下:
c#的ThreadPool使用笔记(二)using System;
c#的ThreadPool使用笔记(二)
using System.Threading;
c#的ThreadPool使用笔记(二)
c#的ThreadPool使用笔记(二)
public class App
}

在代码里面,我尝试对三个问题都进行解决,但是,很遗憾,上面的代码只是解决了第1、2个问题。
虽然,我的MyThreadWork2 () 线程尝试对 MyState 的 Number 进行加1操作,但是,主线程的输出仍然可能是 100,如下所示:
c#的ThreadPool使用笔记(二)MyState 的 Number 值为: 100
c#的ThreadPool使用笔记(二)MyThreadWork 开始启动 …… 第一个线程
c#的ThreadPool使用笔记(二)MyThreadWork 开始启动 …… 第二个线程
c#的ThreadPool使用笔记(二)MyThreadWork2 开始启动…… 第三个线程,
100
c#的ThreadPool使用笔记(二)MyThreadWork2 开始启动…… 第四个线程,
2
c#的ThreadPool使用笔记(二)运行结束…… 第一个线程
c#的ThreadPool使用笔记(二)运行结束…… 第二个线程
c#的ThreadPool使用笔记(二)运行结束…… 第三个线程,
101
c#的ThreadPool使用笔记(二)运行结束…… 第四个线程,
3

光从代码看,我们的输出 MyState 信息的代码应该是后面执行,想不到它居然在线程启动之前就执行了!
呵呵,这就是多线程!
看样子,我需要控制我的主线程——等所有的线程池中的线程都执行完成后,才接着执行主线程中输出 MyState 信息的代码。这个,接下来再说。

相关文章:

  • 2021-06-14
  • 2022-12-23
  • 2021-11-27
  • 2021-07-09
  • 2021-08-27
  • 2021-09-11
猜你喜欢
  • 2022-02-13
  • 2021-06-13
  • 2022-01-08
  • 2022-12-23
  • 2021-06-01
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案