出于某种奇怪的原因,Elapsed 事件触发了两次,它肯定应该触发一次。紧接着,计时器停止工作......代码结构有点像这样:当某个对象包含的某个值(以 500-1500 毫秒的间隔不断更新)增加超过 X 时,它被定义为触发某个事件与前一个值相比较的总和。
例如,如果我将 X 定义为 2,并且我收到的值是 1、2、1、2、3、4、8,那么当输入 8 时,该事件将触发。该事件的事件处理程序启动上述计时器,该计时器在它过去之前运行 Y 时间并触发有问题的事件。如果在计时器结束之前该值恢复正常,则重置计时器。
因此,总体结果应该是一个测量某个动态值的应用程序,并监视它是否存在超过 Y 秒时间发生的大 X 大小异常。
代码中的整体结果看起来像
vMonitor.Range=X;
vMonitor.Over+= new EventHandler(StartTimer);
vMonitor.Normal+= new EventHandler(StopTimer);
vTimer.Elapsed+= new EventHandler(RaiseAlert);
source.BeginUpdate(vMonitor.Value);
实际的问题是 RaiseAlert 在计时器经过时被触发两次,然后就好像计时器完全停止工作,不再触发。我认为值得一提的是,整个应用程序包含大量线程活动,一次至少运行 2 个线程,更新 vMonitor 值。
有什么想法吗?
更新:
关于线程问题,解释确切的结构相当复杂,但我可以说 vMonitor 对象包含在另一个对象中,该对象包含更新值,该值由各个线程不断更改,当然是受监视的. 每当父对象的值更新时,它与 vMonitor 进行比较,并触发适当的事件。vMonitor 中的值随后被父对象值替换。
编辑:我刚刚再次验证了它, vTimer.Elapsed 委托仅包含一个正确的事件处理程序。