是否有任何助手类为我不断监视一个值,以便在值更改时触发事件

本文关键字:一个 事件 任何助 监视 是否 | 更新日期: 2023-09-27 17:58:02

是否有C#语言提供的某种帮助程序,如下面的ChangeMonitor类,可以为我监视更改?

bool errorHappened = false;
...
...
// ChangeMonitor monitors the change of another object for me and run my lambda expression if value changed
var cancellationTokenSource= new CancellationTokenSource();
ChangeMonitor changeMonitor = new ChangeMonitor(errorHappened, () =>
    {
        // Stop my stuffs
        cancellationTokenSource.Cancel();
    }
task.Wait(cancellationTokenSource.Token);

我目前所做的变通办法是使用下面这样的计时器。

System.Timers.Timer checkErrorTimer = new System.Timers.Timer(1000);
checkErrorTimer.Elapsed += (i, j) =>
    {
        if (errorHappened)
            cancellationTokenSource.Cancel();
    };
checkErrorTimer.Start();

是否有任何助手类为我不断监视一个值,以便在值更改时触发事件

否,并且给定属性返回的值可能是随机的,基于计算,以及更典型的支持变量,只有两种解决方案接近您所描述的:

  1. 创建一个轮询类。每隔x个刻度,它就会检查一个属性的值。这可以让您知道值已经更改,但代价是运行大量(根据属性的不同,这实际上可能会更改值)
  2. 让您的属性实现INotifyPropertyChanged然后订阅PropertyChanged事件。这将完全按照您的意愿进行,但您必须控制类源代码