2013-08-16 78 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