📜  C#| Thread(ParameterizedThreadStart)构造函数(1)

📅  最后修改于: 2023-12-03 14:40:29.575000             🧑  作者: Mango

C# | Thread(ParameterizedThreadStart)构造函数

在C#中,Thread是一个非常常用的多线程处理类。然而,在创建Thread对象时,有时需要将一些参数传递给线程函数。在这种情况下,我们可以使用包含ParameterizedThreadStart委托的Thread构造函数。

ParameterizedThreadStart

ParameterizedThreadStart是一个委托,其定义为:

public delegate void ParameterizedThreadStart(object obj);

当创建Thread对象时,可以将一个委托对象作为参数传递给构造函数。这个委托的参数类型为object,因此可以将任何类型的对象传递给线程函数。在线程函数内部,我们可以将这个参数转换成我们需要的类型。

使用构造函数

现在,我们看看如何使用Thread(ParameterizedThreadStart)构造函数来传递参数。首先,创建一个委托,该委托将被作为参数传递。这个委托必须具有与ParameterizedThreadStart委托相同的签名:

private static void MyThreadFunction(object parameter)
{
    Console.WriteLine($"Param received = {parameter}");
}

...

ParameterizedThreadStart threadDelegate = new ParameterizedThreadStart(MyThreadFunction);
Thread thread = new Thread(threadDelegate);

在此示例中,我们定义了一个MyThreadFunction函数,它采用object类型的参数。我们创建了一个委托threadDelegate,该委托绑定到这个函数。最后,我们使用Thread(threadDelegate)构造函数创建了一个新的线程对象。

接下来,让我们看看如何传递参数给线程函数。我们可以使用Thread.Start(object)方法来启动线程,并传递一个参数:

string myParam = "Hello, World!";
thread.Start(myParam);

在这个例子中,我们将一个字符串参数传递给线程函数。在线程函数中,我们可以像这样接收参数:

private static void MyThreadFunction(object parameter)
{
    string myParam = (string)parameter;
    Console.WriteLine($"Param received = {myParam}");
}

在这个示例中,我们将参数转换成了一个字符串,并输出了这个字符串。

示例代码

下面是一个完整的示例代码,演示了如何使用Thread(ParameterizedThreadStart)构造函数传递参数:

using System;
using System.Threading;

class Program
{
    private static void MyThreadFunction(object parameter)
    {
        string myParam = (string)parameter;
        Console.WriteLine($"Param received = {myParam}");
    }

    static void Main()
    {
        ParameterizedThreadStart threadDelegate = new ParameterizedThreadStart(MyThreadFunction);
        Thread thread = new Thread(threadDelegate);

        string myParam = "Hello, World!";
        thread.Start(myParam);

        thread.Join();
    }
}

最后,我们使用Thread.Join()方法暂停主线程,直到新线程完成执行。在这个例子中,我们只创建了一个线程并传递了一个参数,但是我们可以通过创建更多的线程并更改传递的参数来进行扩展。