Вы можете использовать абстрактный источник измерения
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;
}
}
и когда она падает ниже нуля? –
вместо 'R.Next (0, 5)' используйте некоторый var, например 'R.Next (0, x)', где 'x' уменьшается с некоторым другим таймером – Nino
Я хочу, чтобы он не упал до 0. поэтому, если я хочу, чтобы он упал, я хотел бы удалить abit как 5.0 4.9 4.8 и т. д. –