我正在尝试在单独的线程上运行方法,但是当我尝试初始化新线程时,我收到此错误:
字段初始值设定项不能引用非静态字段,方法或属性Form1.update()
更新方法:
public void update()
{
XmlDocument doc = new XmlDocument();
status s = new status();
doc.LoadXml(s.getStatus("12345"));
char[] xmlChar = { 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
int[] lightStatus = new int[9];
int[] doorStatus = new int[5];
int[] fanStatus = new int[5];
int[] windowStatus = new int[5];
for (int i = 1; i < 9; i++)
{
XmlNode lights = doc.SelectSingleNode("All/Lights/status/" + xmlChar[i] + "/text()");
lightStatus[i] = Convert.ToInt16(lights.Value);
}
for (int i = 1; i < 5; i++)
{
XmlNode fans = doc.SelectSingleNode("All/Fans/status/" + xmlChar[i] + "/text()");
XmlNode doors = doc.SelectSingleNode("All/Doors/status/" + xmlChar[i] + "/text()");
XmlNode windows = doc.SelectSingleNode("All/Windows/status/" + xmlChar[i] + "/text()");
fanStatus[i] = Convert.ToInt16(fans.Value);
doorStatus[i] = Convert.ToInt16(doors.Value);
windowStatus[i] = Convert.ToInt16(windows.Value);
}
u1.update(lightStatus);
u2.update(fanStatus);
}
我在初始化程序上收到错误:
System.Threading.Thread updateThread = new System.Threading.Thread(update);
答案 0 :(得分:1)
你把你的线程声明放在哪里? 你能尝试把它放在你的构造函数上吗?
像这样:
/* *********** */
/* CONSTRUCTOR */
/* *********** */
public MyConstructor()
{
// .....
// Declare and initialize Inside the constructor
System.Threading.Thread updateThread = new System.Threading.Thread(update);
}
答案 1 :(得分:0)
基本上都是错误消息中的所有内容 - 如果您敢于阅读the docs,请说明:
线程程序可以是静态方法或实例方法。
因此要么使用静态方法,要么使用同一类中的构造函数:
System.Threading.Thread updateThread = new System.Threading.Thread(myObj.update);