Пишу академическую программу - монитор частоты. Для печати графиков использую Nuget Oxylot. Не могу понять как мне напечатать график в реальном времени. Например изменения раз в секунду. По оси X должно быть время, по оси Y - значение double, изменяющееся от 0 до 50.00 единиц (частота в Гц). Взял семпл из документации, а как туда значение вставить и обновлять по времени не понимаю... Вот класс графика:
public class Plotter
{
private PlotModel model;
private DateTime startDate = DateTime.Now.AddDays(-10);
private DateTime endDate = DateTime.Now;
private readonly List<OxyColor> colors = new List<OxyColor>
{
OxyColors.Green,
OxyColors.IndianRed,
OxyColors.Coral,
OxyColors.Chartreuse,
OxyColors.Azure
};
private readonly List<MarkerType> markerTypes = new List<MarkerType>
{
MarkerType.Plus,
MarkerType.Star,
MarkerType.Diamond,
MarkerType.Triangle,
MarkerType.Cross
};
public Plotter()
{
model = new PlotModel { Title = "DateTimeAxis" };
}
public PlotModel PrintChart()
{
var minValue = DateTimeAxis.ToDouble(startDate);
var maxValue = DateTimeAxis.ToDouble(endDate);
model.Axes.Add(new DateTimeAxis { Position = AxisPosition.Bottom, Minimum = minValue, Maximum = maxValue, StringFormat = "HH:mm" });
return model;
}}
В основном окошке:
public void PrintChart()
{
Plotter pt = new Plotter();
frGraph.Model = pt.PrintChart();
}
По событию кнопки разрешаю печать:
private void startDrawing_Click(object sender, EventArgs e)
{
PrintChart();
}
И по таймеру пытаюсь обновлять (не уверен, что делаю правильно..)
private void InitializeTimerForChart()
{
tickCount.Interval = References.TIMER_INTERVAL; // (1000 мс)
this.tickCount.Tick += new System.EventHandler(this.tickCount_Tick);
tickCount.Enabled = true;
}
private void tickCount_Tick(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke((MethodInvoker)delegate ()
{
frGraph.Invalidate();//PrintChart();
});
}
}
На данный момент класс просто показывает на форме модель с осями, на оси Y текущее время.
В общем получилось создать линейный график без обновлений. Обновлять буду также через таймер раз в секунду.
public PlotModel PrintChart()
{
var minValue = DateTimeAxis.ToDouble(startDate);
var maxValue = DateTimeAxis.ToDouble(endDate);
model.Axes.Add(new DateTimeAxis { Position = AxisPosition.Bottom, Minimum = minValue, Maximum = maxValue, StringFormat = "HH:mm" });
var leftAxisY = new LinearAxis { Position = AxisPosition.Left };
model.Axes.Add(leftAxisY);
var lineSeries = new LineSeries
{
Title = "Линейный график",
StrokeThickness = 3,
LineStyle = LineStyle.Automatic,
MarkerType = MarkerType.Circle,
MarkerSize = 5,
MarkerStroke = OxyColors.White,
MarkerFill = OxyColors.Automatic,
MarkerStrokeThickness = 1.5,
};
for (int i = 0; i < 50; i++)
{
lineSeries.Points.Add(new DataPoint(minValue, i));
}
model.Series.Add(lineSeries);
return model;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу добавить компоненты COMНажимаю правой клавишей мыши по панели элементов и нажимаю 'Выбрать элементы
Доброе время сутокПомогите пожалуйста составить инъекцию для функции RtlGetFullPathName_UEx