【发布时间】:2021-08-10 20:53:00
【问题描述】:
我有一个事件,它大约每 100 毫秒从 api 值返回一个不同的整数。
我想在任何给定的 4 秒内事件中整数的差为 20 或更大时执行一些代码。
这里是每 100 毫秒返回 int 值的当前事件
private void OnMarketUpdate(object sender, UpdateArgs<L1LsPriceData> e)
{
var data = e.UpdateData;
int = data.intValue;
}
由于重叠,我无法创建一个计时器来每 4 秒检查一次,例如。计时器经过 2 秒后,到下一个计时器经过 2 秒后,可能会有 20 或更多的变化,但不会被检测到,因为它在 2 个不同的调用中。
如果有办法至少每秒运行 4 秒计时器以检测上面更新事件中的变化,那已经足够了,但不知道该怎么做。
任何帮助将不胜感激:)
【问题讨论】:
-
你应该查看
StopWatch类:docs.microsoft.com/en-us/dotnet/api/… -
您对 Rx (Reactive Extensions) 解决方案感兴趣吗?或者您不想在项目中添加依赖项?
-
添加一个 lastTrue 日期时间变量。在 onmarketupdated 中,将其设置为您的条件为真时的当前时间。然后在计时器滴答声中,您可以每秒检查一次,看看 lastTrue 是否在 4 秒内。我不清楚您是否还需要设置 lastTrue 以在您采取行动时设置为 mindate 或其他类似的设置,但这似乎很可能。
-
使用 utcnow 作为当前时间以避免任何系统时间或夏令时异常。
标签: c# .net wpf multithreading timer