线程方法

时间:2014-01-09 07:26:03

标签: c# .net multithreading

我正在尝试在单独的线程上运行方法,但是当我尝试初始化新线程时,我收到此错误:

  

字段初始值设定项不能引用非静态字段,方法或属性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);

2 个答案:

答案 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);