2014-01-09 61 views
0

我試圖運行在一個單獨的線程的方法,但是當我嘗試初始化新的線程我得到這個錯誤:線程的方法

A field initializer cannot reference the non-static field, method, or property 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

http://stackoverflow.com/questions/12659551/threading-problems-in-c-sharp-a-field-initializer-cannot-reference-the-non-stat 這可能會幫助你。 – Nil23

+0

或者這個:http://stackoverflow.com/questions/2642978/how-to-call-the-method-in-thread-with-aruguments-and-return-some-value –

回答

1

你在哪裏把你的decalartion爲主題? 你可以嘗試把它放在你的構造函數上嗎?

像這樣:

/* *********** */ 
/* CONSTRUCTOR */ 
/* *********** */ 

public MyConstructor() 
{ 
    // ..... 

    // Declare and initialize Inside the constructor 
    System.Threading.Thread updateThread = new System.Threading.Thread(update); 
} 
0

這一切都沒有錯誤消息基本上是 - 如果你敢讀the docs他們聲明:

線程程序可以是靜態方法或實例方法。

因此,要麼使用一個靜態方法或從你的構造在同一類的東西,如:

System.Threading.Thread updateThread = new System.Threading.Thread(myObj.update); 
+0

問題不在於'正在引用update'方法,其*正在被引用。它需要被移動到'.ctor'或其他非靜態方法。 –

+0

鑑於 - 編輯相應。 – cacau