您可以使用抽象测量源
public interface IMeasurementSource
{
MeasureModel GetNext();
}
为您的类(可能是表单)提供一些IMeasurementSource
实现并将其保存在类字段中。例如
private IMeasurementSource measurementSource = new BouncingMesasurementSource(5, 0.1);
并在每次计时器滴答时调用它:
ChartValues.Add(measurementSource.GetNext());
实现抽象
您可以通过从真实来源获取测量值来实现此接口。或者您可以使用随机测量生成器:
public class RandomMeasurementSource : IMeasurementSource
{
private readonly Random random = new Random();
private readonly int min;
private readonly int max;
public RandomMeasurementSource(int min, int max)
{
this.min = min;
this.max = max;
}
public MeasureModel GetNext()
{
return new MeasureModel { DateTime = DateTime.Now, Value = random.Next(min, max) };
}
}
或弹跳将返回并强制在零和最大值之间:
public class BouncingMeasurementSource : IMeasurementSource
{
private readonly double max;
private double step;
private double current;
public BouncingMeasurementSource(int max, double step)
{
this.max = max;
this.step = step;
this.current = max;
}
public MeasureModel GetNext()
{
var model = new MeasureModel { DateTime = DateTime.Now, Value = current };
current -= step;
if (current < 0 || max < current)
{
step = -step;
current = current < 0 ? 0 : max;
}
return model;
}
}