不能使用非静态方法的线程

时间:2016-04-28 09:13:20

标签: c# multithreading

我试图从一个线程调用一个名为UpdateResults()的非静态方法。这是我的代码:

 class Live
 {
     Thread scheduler = new Thread(UpdateResults);

     public Live()
     { 
         scheduler.Start();
     }

     public void UpdateResults() 
     {
        //do some stuff
     }
}

但是我收到了这个错误:

  

字段初始值设定项不能引用属性,方法或非静态字段' Live.UpdateResults()'

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

C# 6.0 解决方案:将分配(=)更改为初始化=>

  class Live {
    // Please, note => instead of =
    Thread scheduler => new Thread(UpdateResults);

    public Live() {
      scheduler.Start();
    }

    public void UpdateResults() {
      //do some stuff
    }
  }

答案 1 :(得分:3)

这与Thread无关。有关详细信息,请参阅this问题。 要解决您的问题,请按以下步骤更改您的课程:

class Live
{
    Thread scheduler;

    public Live()
    { 
        scheduler = new Thread(UpdateResults);
        scheduler.Start();
    }

    public void UpdateResults() 
    {
       //do some stuff
    }
}

正如Jon Skeet在上述问题中提到的那样,来自C#4规范的第10.5.5.2节:

  

实例字段的变量初始值设定项无法引用   正在创建的实例。因此,引用是编译时错误   这在一个变量初始化程序中,因为它是一个编译时错误   一个变量初始化程序,通过一个引用任何实例成员   简单名称

当你写new Thread(UpdateResults)时,你真的在​​写new Thread(this.UpdateResults)