多线程中的类型不匹配错误

时间:2018-06-21 08:56:07

标签: c# multithreading

using System;
using System.Threading;
public class pgm
{
    public static void Main()
    {
        Thread newThread = new Thread(pgm.work1);
        newThread.Start(20);
        pgm p = new pgm();
        newThread = new Thread(p.work2);
        newThread.Start("Instance");
        Console.ReadLine();
    }
    public static void work1(object data)
    {
        Console.WriteLine("Static Thread Procedure : Data ='{0}'",data);
    }
    public void work2(object data)
    {
        Console.WriteLine("Instance Thread Procedure : Data ='{0}'", data);
    }
}

当我将work1和work2方法的参数写为“ int数据”和“ string数据”时,将引发类型不匹配错误。为什么?

1 个答案:

答案 0 :(得分:-1)

您使用的Thread的构造函数具有以下签名:

public Thread(ParameterizedThreadStart start)

ParameterizedThreadStart是具有以下签名的委托人:

public delegate void ParameterizedThreadStart(object obj)

因此,当您尝试启动方法void work1(object data)void work2(object data)时,它们与该签名匹配,因此可以正常工作。

但是当您将它们更改为void work1(int data)void work2(string data)时,它们将不匹配,编译器会让您知道。

如果您可以做自己想做的事情,那么可能会这样做:

Thread newThread = new Thread(pgm.work1);
newThread.Start("Some String"); //but `pgm.work1` takes an `int`!

这将导致运行时间异常。编译器的一部分工作是防止您犯这样的错误。因此,这是一个编译时错误。