📅  最后修改于: 2023-12-03 14:40:29.575000             🧑  作者: Mango
在C#中,Thread是一个非常常用的多线程处理类。然而,在创建Thread对象时,有时需要将一些参数传递给线程函数。在这种情况下,我们可以使用包含ParameterizedThreadStart委托的Thread构造函数。
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()方法暂停主线程,直到新线程完成执行。在这个例子中,我们只创建了一个线程并传递了一个参数,但是我们可以通过创建更多的线程并更改传递的参数来进行扩展。