首页 新闻 会员 周边

C#中线程调用问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-08-24 13:17

一般在C#中调用线程用的是如下语句:

Thread thread1 = new Thread(new ThreadStart(function));

//or

Thread thread2 = new Thread(new ParameterizedThreadStart(function));

其中function方法要求要么没有参数,要么只有一个object类型的参数。

那么如果我这里有一个方法function2(int, int)(即方法的参数不是object类型,数量也多于一个),要如何用ThreadStart委托调用它呢?目前我想的方法是多写一个RunFunction()方法,用它调用function2,再由ThreadStart调用RunFunction,但总觉得这样比较麻烦,还要多一个方法。能否有更好的手段?

飞鸟_Asuka的主页 飞鸟_Asuka | 初学一级 | 园豆:193
提问于:2012-08-24 10:25
< >
分享
最佳答案
1
Thread thread1 = new Thread(() => function2(1,2));
收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-08-24 12:37

嗯,忘了有lambda这个东西了,受教了。

飞鸟_Asuka | 园豆:193 (初学一级) | 2012-08-24 13:16
其他回答(1)
0

把你的参数封装成一个类。

Launcher | 园豆:45045 (高人七级) | 2012-08-24 10:37

即使把参数封装成一个类,但是在ParameterizedThreadStart中调用相应的方法依旧提示“function2的所有重载均与委托System.Threading.ParameterizedThreadStart不匹配”。

using System;
using System.Threading;

class Parameters
{
        public int a;
        public int b;
}

static class Methods
{
        public void function2(Parameters p)
        {
               //do something
        }
}

class programe
{
      static void Main()
      {
              Thread thread1 = new Thread(new ParameterizedThreadStart(Methods.function2));
              //此处提示编译错误:“function2”的重载均与委托“System.Threading.ParameterizedThreadStart”不匹配
      }
}
支持(0) 反对(0) 飞鸟_Asuka | 园豆:193 (初学一级) | 2012-08-24 11:21

@飞鸟_Asuka: static class Methods
{
       
public static void function2(object p)
        {
              
//do something
        }
}

 

你可以仔细看下 ParameterizedThreadStart 的定义。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-08-24 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册