之前做了一个小的应用程序,用的是c#语言,涉及到了多线程的多参数传递,经过查找资料总结了一下解决方案!
第一种解决方案的原理是:将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递多个参数。看如下代码:
复制代码 代码如下:using System;using System.Threading;//ThreadWithState 类里包含了将要执行的任务以及执行任务的方法
public class ThreadWithState {//要用到的属性,也就是我们要传递的参数private string boilerplate;private int value;//包含参数的构造函数
public ThreadWithState(string text, int number){boilerplate = text;value = number;}//要丢给线程执行的方法,本处无返回类型就是为了能让ThreadStart来调用
public void ThreadProc(){//这里就是要执行的任务,本处只显示一下传入的参数Console.WriteLine(boilerplate, value);}}----------分隔线-----------复制代码 代码如下://用来调用上面方法的类,是本例执行的入口public class Example {public static void Main(){//实例化ThreadWithState类,为线程提供参数ThreadWithState tws = new ThreadWithState(“This report displays the number {0}.”, 42);// 创建执行任务的线程,并执行
Thread t = new Thread(new ThreadStart(tws.ThreadProc));t.Start();Console.WriteLine(“Main thread does some work, then waits.”);t.Join();Console.WriteLine(“Independent task has completed; main thread ends.”);}}从上面的例子就能很清楚的得到我们想要的结果,注意这句代码的用法:Thread t = new Thread(new ThreadStart(tws.ThreadProc));第二种解决方案的原理是把多个参数封装成object来传递,然后在线程里使用时拆箱即可,看如下代码:
复制代码 代码如下:ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod);Thread myThread = new Thread(ParStart);object o = “hello”;myThread.Start(o);ThreadMethod如下:public void ThreadMethod(object ParObject){//程序代码}
精彩评论