我试图从一个线程调用一个名为UpdateResults()
的非静态方法。这是我的代码:
class Live
{
Thread scheduler = new Thread(UpdateResults);
public Live()
{
scheduler.Start();
}
public void UpdateResults()
{
//do some stuff
}
}
但是我收到了这个错误:
字段初始值设定项不能引用属性,方法或非静态字段' Live.UpdateResults()'
我该如何解决这个问题?
答案 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)
。