(C# Value Doesn't Change) 从静态回调方法修改静态变量
(C# Value Doesnt Change) Modifiying Static Variables from Static Callback Method
您好,请问如何从静态回调中修改值静态变量,并重新读取值。当静态变量的值发生变化时,我需要在循环时停止。这是我的代码。
问题是 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;
}
您好,请问如何从静态回调中修改值静态变量,并重新读取值。当静态变量的值发生变化时,我需要在循环时停止。这是我的代码。
问题是 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;
}