您好,我想问一下如何从静态回调中修改值静态变量,并再次读取值。当静态变量的值发生变化时,我需要在循环时停止。这是我的代码。
问题是来自stepControlEx的值保持不变,当另一个回调再次运行并修改值时,它不会改变。它使我的循环卡住了,无法结束。
感谢您的帮助
Private static int stepControl = 0;
Private static int stepControlEx
{
get { return stepControl;}
set { stepControl = value;}
}
Private static void CallbackHandle (Object object)
{
If (object == 0)
{
stepControlEx = 0;
While (stepControlEx == 0)
{
//do events
//stop when stepControl Change
}
}
Else If (object == 1)
{
stepControlEx = 1;
While (stepControlEx == 1)
{
//do events
//stop when stepControl Change
}
}
}
已编辑(已解决):我更改了算法并使用线程来处理队列中的数据。回调函数仅将输入排队到队列,线程将输入取消排队进行处理,现在步进控制不需要作为全局变量。谢谢
你的代码看起来模棱两可。但是我对你的代码只有一个评论。如果您有一个静态变量并在多个线程之间共享,则需要在更改变量时锁定该变量。我认为你会陷入僵局,这就是为什么循环永远不会结束。
无论何时在多线程环境中分配任何静态变量。 你需要这样做:
lock (new object())
{
stepControlEx = 0;
}