gpt4 book ai didi

C# 线程 -ThreadStart 委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 18:48:28 29 4
gpt4 key购买 nike

执行以下代码会产生错误:ProcessPerson 的重载与 ThreadStart 不匹配。

public class Test
{
static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(new ThreadStart(ProcessPerson));
th.Start(p);
}

static void ProcessPerson(Person p)
{
Console.WriteLine("Id :{0},Name :{1}", p.Id, p.Name);
}

}

public class Person
{

public string Id
{
get;
set;
}

public string Name
{
get;
set;
}


}

如何解决?

最佳答案

首先,你想要ParameterizedThreadStart - ThreadStart本身没有任何参数。

其次,ParameterizedThreadStart 的参数只是object,因此您需要更改您的ProcessPerson 代码以从 转换objectPerson

static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(new ParameterizedThreadStart(ProcessPerson));
th.Start(p);
}

static void ProcessPerson(object o)
{
Person p = (Person) o;
Console.WriteLine("Id :{0},Name :{1}", p.Id, p.Name);
}

但是,如果您使用的是 C# 2 或 C# 3,则更简洁的解决方案是使用匿名方法或 lambda 表达式:

static void ProcessPerson(Person p)
{
Console.WriteLine("Id :{0},Name :{1}", p.Id, p.Name);
}

// C# 2
static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(delegate() { ProcessPerson(p); });
th.Start();
}

// C# 3
static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(() => ProcessPerson(p));
th.Start();
}

关于C# 线程 -ThreadStart 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1782210/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com