我有一个使用 .NET for Windows Azure 的 WebService。在那里我有一个单例类,它有一个在 while(true) 循环中做某事的方法。此方法使用单例中的实例变量。我在一个新线程中启动无限循环。当我更改实例变量的值(使用我的 web 服务)时,该值会更改。但是在无限循环的线程中,使用的是旧值。代码如下所示:
单例类
public class Singleton
{
static Singleton _instance;
public static Singleton Instance
{
get { return _instance ?? (_instance = new Singleton()); }
}
private Singleton() {
this.Intervall = -20;
}
public int Intervall { get; set; }
public void run()
{
Thread thread = new Thread(privateRun);
thread.Start();
}
private void privateRun()
{
while (true)
{
// do something with Intervall Value
Trace.WriteLine(this.Intervall);
}
}
}
在 WebRole onstart() 中启动 run 方法;
public override bool OnStart()
{
// start the singleton method
Singleton singleton= Singleton.Instance;
singleton.run();
return base.OnStart();
}
并从 WebService 更改值
public string setIntervall(int Intervall)
{
Singleton.Instance.Intervall = Intervall;
return "New Intervall: " + Singleton.Instance.Intervall;
}
WebService 真正返回了新的 Intervall。但在 while 循环中使用旧值。那么如何更改创建线程中的值呢?