C#:向线程中传递多个参数的2种解决方法

  • A+
所属分类:C#

C#:向线程中传递多个参数的2种解决方法-xinbadar的blog-搜狐博客

| |
| --- |
| ## C#:向线程中传递多个参数的2种解决方法
问题:
对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下):
Thread t = new Thread(new ParameterizedThreadStart(newthread));
t.start(参数);
void newthread(object)
{
    .............
}
而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑
void method(int begin,int end)
{
    ..................
}
解决办法1:新建一个跑方法的类
class myclass
{
    private int begin;
    public int begin
    {
        set{this.begin=value;}
    }
    private int end;
    public int end
    {
        set{this.end=value;}
    }
    public run()
    {
        method(begin,end);
    }
    private method(int begin,int end)
    {
        ...............
    }
}
然后新建一个该类实例,赋值之后就可以跑了,代码如下;
myclass c = new myclass();
c.begin=100;
c.end=10000;
Thread t = new Thread(new Threadstart(c.run))
t.start();
2、解决方法2:将数组或集合实例作为参数传入
目前正在做一个多线程的软件,用到了这部分,感觉每次都要新建类,比较麻烦,查了网上主流都是解决方法1中的方法,后来自己琢磨出另一个方法,就是尽管新的线程只能传1个参数进去,但是我们可以传一个集合或者数组类的参数进去,这样就可以解决一次向新线程中传递多个参数的问题了。
同样,对于上面的method的方法,需要传递2个int类型的整数,首先添加一个method方法的重载
void method(object o)
{
    //此处对传进来的参数进行处理
    int[] p = (int[])o;
    //调用原来的method方法
    method(p[0],p[1]);
}
再将要传递的参数用数组或集合方式储存起来
int para[]=new int[2]{100,10000};
最后新建线程进行调用
THread t = new Thread(new ParameterizedThreadStart(method))
t.start(para);
这样就可以达到将2个参数传递入线程的目的了。
传递的参数类型也可以用List<>或其他集合,传递进去的这些参数的类型都是相同的,对于不同的类型,可以考虑采用List或者object[] 的方式传进去,在重载的方法中再对参数进行处理即可。 |

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
Copyright ©  站点名称  版权所有. Begin主题
  • 文章目录
  • icon