C# Window编程随记——多线程和线程池

C# Window编程随记——多线程和线程池

在进行C#编程时,我们常常遇到一些任务量很大的情况,例如在读取多个表格的数据,并且要创建多个文件来保存解析之后的数据时,假如只是用简单的for循环来完成的话,会有明显的延迟现象,当数据量比较大时,甚至可能要等上好几分钟。为了提高任务的完成效率,我们需要适当地引入多个线程来并行地执行任务。

  • 多线程的概念
  • 线程池的使用

2.多线程的概念

多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

3.线程池的使用

一个线程池是一个可以完成一系列当前环境下任务的线程的集合,.NET Framework提供了包含ThreadPool类的System.Threading 空间,这是一个可直接访问的静态类,该类对线程池是必不可少的。
ThreadPool.SetMaxThreads 方法

public static bool SetMaxThreads(
    int workerThreads,
    int completionPortThreads
)

参数:
workerThreads
类型:System.Int32
线程池中辅助线程的最大数目。
completionPortThreads
类型:System.Int32
线程池中异步 I/O 线程的最大数目。

一下方法可将任务添加进线程池:

ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));

重载

ThreadPool.QueueUserWorkItem(new WaitCallback(方法名), 参数);

创建一个新的类,在里面重写一个方法,方法名可以自定义,但是返回值必须为void,而且传入形参必须是一个object类型的,这是线程池回调方法的一个规定:

public class thr
{
    /// <summary>
    /// 解析和生成文件
    /// </summary>
    /// <returns></returns>
    public void AnalyseAndBuildFiles(Object data)
    {
         //根据具体需求将参数object转换为指定类型
         string config_strs = data as string;
    }
}

创建完这个类之后,接下来我们就要看看怎么在我们的业务中来使用线程池了,方法很简单:创建一个类的实体,然后调用实体的方法作为线程池的回调方法即可,QueueUserWorkItem方法的第二个参数,就是传递给回调函数的object类型的参数:

thr t = new thr();
ThreadPool.QueueUserWorkItem(new WaitCallback(t.AnalyseAndBuildFiles), excel_config_list[i]);

你可能感兴趣的:(多线程,编程,线程池)