将方法名称和参数动态传递给thread.Start

时间:2013-10-02 05:16:59

标签: c# multithreading object parameters arguments

重新处理旧问题:

我有一个方法可以简化我的线程,但是我遇到了多个参数传递给它的问题!

public static Thread StartThread(ParameterizedThreadStart targetMethod, object argument)
{
            Thread result = null;

            result = new Thread(targetMethod);

            result.Start(argument);
            return result;
} 

有什么方法可以将一个以上的参数传递给result.Start(argument)?或者是否有其他方法可以保持可扩展性?

任何帮助都很棒:)

谢谢〜丹尼尔

2 个答案:

答案 0 :(得分:2)

这很简单

static void targetMethod(object obj)
{
    Tuple<string, int> tuple = (Tuple<string, int>)obj;
    Console.WriteLine(tuple.Item1);
    Console.WriteLine(tuple.Item2);
}

static void Main(string[] args)
{
    Thread thread = new Thread(targetMethod);
    thread.Start(new Tuple<string, int>("simple string", 123));
    thread.Join();
    Console.ReadLine();
}

答案 1 :(得分:1)

您可以将对象参数中的Tuple对象传递给StartThread方法。另一种首选方式可能是传递某些classinterface的对象而不是元组。

object population = new Tuple<string, int>("a", 1);

targetMethod中将包含元组的强制转换对象转换回元组。

private void  targetMethod(object t)
{
    Tuple<string, int> t = (Tuple<string, int>)population;
    string yourStringVariable = t.Item1;  
    int yourIntVariable = t.Item2;
}