C#创建线程函数不能传递参数吗
时间: 2024-10-06 14:00:54 浏览: 9
在C#中,创建线程时可以传递参数,但并不是像构造函数那样直接作为参数传入,而是通过一些间接的方式来实现。主要有两种常见的方法:
1. **使用ThreadStart委托**:你可以创建一个包含参数的方法,然后把这个方法包装到ThreadStart委托中,作为Thread对象的构造函数参数。例如:
```csharp
public delegate void MyThreadProc(int arg);
MyThreadProc myMethod = new MyThreadProc(MyMethodWithArgument);
Thread thread = new Thread(myMethod, someValue); // 将参数someValue传递给myMethod
private void MyMethodWithArgument(int param) {
// 使用传递进来的参数param
}
```
2. **使用Action或Func**:对于更复杂的参数类型,可以使用Action或者Func作为ThreadStart,它们支持泛型,可以直接传递参数。例如:
```csharp
ThreadStart task = () => SomeMethod(someObject); // 动作方法,直接传递引用类型参数
thread = new Thread(task); // 线程启动时执行SomeMethod(someObject)
Func<int, int, int> adder = (a, b) => a + b; // 带返回值的泛型方法
thread = new Thread(adder, 5, 10); // 线程启动时执行adder(5, 10)
```
这里要注意的是,无论哪种方式,线程内部访问参数时需要确保线程安全,特别是在并发环境下。