(C# 值不会更改)从静态回调方法修改静态变量

本文关键字:静态 回调 方法 变量 修改 | 更新日期: 2023-09-27 18:33:03

您好,我想问一下如何从静态回调中修改值静态变量,并再次读取值。当静态变量的值发生变化时,我需要在循环时停止。这是我的代码。

问题是来自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
    }
  }
}

已编辑(已解决):我更改了算法并使用线程来处理队列中的数据。回调函数仅将输入排队到队列,线程将输入取消排队进行处理,现在步进控制不需要作为全局变量。谢谢

(C# 值不会更改)从静态回调方法修改静态变量

你的代码看起来模棱两可。但是我对你的代码只有一个评论。如果您有一个静态变量并在多个线程之间共享,则需要在更改变量时锁定该变量。我认为你会陷入僵局,这就是为什么循环永远不会结束。

无论何时在多线程环境中分配任何静态变量。 你需要这样做:

lock (new object())
        {
            stepControlEx = 0;
        }