为什么ParameterizedThreadStart只允许对象参数?

时间:2012-01-21 05:21:38

标签: c# multithreading

请告诉我为什么 ParameterizedThreadStart 类只允许只有System.object参数类型包含的方法。

public class MainThreadTest
{
    public static void Main(string[] args)
    {
        Thread T = new Thread(new ParameterizedThreadStart(DisplayYOrX));
        T.Start("X");

        DisplayYOrX("Y");
    }

    static void DisplayYOrX(object outValue)
    {
        string Parameter = (string)outValue;

        for(int i=0; i<10; i++)
            Console.Write(Parameter);
    }
}

为什么我想知道这是我不想再使用类型转换语法。

string Parameter = (string)outValue;

1 个答案:

答案 0 :(得分:15)

限制的原因是ThreadStart不是通用委托,因此它只能传递object。通过使用直接传递值的lambda,这很容易解决。

public static void Main(string[] args) {
  ThreadStart start = () => { 
    DisplayYOrX("X");
  };
  Thread t = new Thread(start);
  t.Start();

  ...
}

static void DisplayYOrX(string outValue) {
  ...
}

C#2.0版本

public static void Main(string[] args) {
  ThreadStart start = delegate { 
    DisplayYOrX("X");
  };
  Thread t = new Thread(start);
  t.Start();

  ...
}