C#线程无法引用非静态怎么办
时间: 2023-07-27 20:10:14 浏览: 46
在C#中,线程无法直接引用非静态成员。这是因为线程是在其自己的上下文中运行,而非静态成员是与特定实例相关联的。如果要在线程中访问非静态成员,则需要将该成员作为参数传递给线程或使用 lambda 表达式。
以下是一个示例,演示如何将实例成员传递给线程:
```
public class MyClass
{
public void MyMethod()
{
// 非静态成员
}
public void StartThread()
{
Thread t = new Thread(new ThreadStart(() => MyMethod()));
t.Start();
}
}
```
在上面的示例中,我们创建了一个名为 MyClass 的类,并在其中定义了一个名为 MyMethod 的非静态方法。然后,我们在 StartThread 方法中创建了一个新线程,并将 MyMethod 作为参数传递给它。
另一种方法是使用 lambda 表达式,如下所示:
```
public class MyClass
{
private int _value;
public void MyMethod()
{
// 非静态成员
}
public void StartThread()
{
Thread t = new Thread(() =>
{
MyMethod();
Console.WriteLine(_value);
});
t.Start();
}
}
```
在上面的示例中,我们使用 lambda 表达式来访问 MyClass 类的非静态成员 _value 和 MyMethod。这样,我们就可以在线程中访问非静态成员了。