C# 向线程中传入多个参数的几种方法
1.使用匿名方法或 Lambda 表达式:
Thread clientThread = new Thread(() => HandleClient(clientSocket, param1, param2));
clientThread.Start();
// 处理方法
static void HandleClient(Socket clientSocket, int param1, string param2)
{
// 处理逻辑
}
2.使用自定义类封装参数:
class ClientParams
{
public Socket ClientSocket { get; set; }
public int Param1 { get; set; }
public string Param2 { get; set; }
}
// 创建线程
ClientParams parameters = new ClientParams
{
ClientSocket = clientSocket,
Param1 = 10,
Param2 = "测试"
};
Thread clientThread = new Thread(HandleClient);
clientThread.Start(parameters);
// 处理方法
static void HandleClient(object obj)
{
ClientParams parameters = (ClientParams)obj;
Socket clientSocket = parameters.ClientSocket;
int param1 = parameters.Param1;
string param2 = parameters.Param2;
// 处理逻辑
}
3. 使用元组(C# 7.0及以上版本):
var parameters = (clientSocket, param1: 10, param2: "测试");
Thread clientThread = new Thread(() => HandleClient(parameters));
clientThread.Start();
// 处理方法
static void HandleClient((Socket socket, int param1, string param2) parameters)
{
Socket clientSocket = parameters.socket;
int param1 = parameters.param1;
string param2 = parameters.param2;
// 处理逻辑
}
4.使用 ParameterizedThreadStart 委托(仅适用于单个对象参数):
object[] parameters = new object[] { clientSocket, 10, "测试" };
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClient));
clientThread.Start(parameters);
// 处理方法
static void HandleClient(object obj)
{
object[] parameters = (object[])obj;
Socket clientSocket = (Socket)parameters[0];
int param1 = (int)parameters[1];
string param2 = (string)parameters[2];
// 处理逻辑
}

浙公网安备 33010602011771号