2013-08-16 139 views
-1

所以我在這裏有一個問題。我在我的類中聲明瞭一些變量,然後嘗試更改它,然後使用我的窗體窗體線程讀取它。該變量正在被讀取爲它所聲明的初始值,並且沒有任何東西可以改變它。例如:由另一個線程讀取變量 - 變量不會改變

我聲明在我的Class1.cs值:

public static int TestVar = 51; 

然後我在同一類後的值更改爲例如45:

TestVar = 45; 

然後我讀可變從我的Windows窗體線程是這樣的:

label1.Text = Class1.TestVar.ToString(); 

而我的窗體中的結果是51而不是45。如果我聲明爲0或沒有任何初始值,則無關緊要。它將保持爲0而不是。

它已被聲明的類它讀取變量罰款爲45,不知何故另一個線程沒有更新。

Windows窗體正在運行使用:

public void RunThread() 
{ 
    Thread thread = new Thread(new ThreadStart(RunForm)); 
    thread.Name = "NewForm"; 
    thread.Start(); 
} 

public void RunForm() 
{ 
    Application.Run(new NewForm()); 
} 

任何幫助嗎?

+0

你能對這個問題再加上工作樣本? – Nenad

+0

您需要發佈更多代碼。我將把一美元放在「你也有一個名爲TestVar的局部變量」上。 –

+0

對不起,這個問題是一個更大的應用程序的一部分。不,我沒有局部變量。我試着用全新的變量來開始。有趣的是,當我使用聲明變量的線程顯示窗體窗體時,它工作正常。當我從另一個不同的線程啓動它時 - 它回到初始狀態。 – FrozenHaxor

回答

0

如果您使用的是可變的幾個線程,你必須聲明它volatile

public static volatile int TestVar = 51; 
+0

試過了。同樣的結果。 – FrozenHaxor

+0

你確定在變量被讀取之前發生了變化? – FrankPl

+0

是的。我設置了它,然後在同一個課堂上閱讀它,並且它變好了。然後,當我顯示窗體時,窗體顯示爲初始狀態,我可以打開窗體或將該變量設置爲無數次,但不會更新它。 – FrozenHaxor