private async Task GenerateGlobalCheckpointLatencyChart() { // Breaks the method into an async method so it can work in peace and be awaited. await Task.Delay(1).ConfigureAwait(false); var data = Data.ReaderStatsBySecond. ToList(). OrderBy(x => x.Key). Select(x => new { AvgPoint = new DataPoint(x.Key, x.Average(z => z.CheckpointDuration)), MaxPoint = new DataPoint(x.Key, x.Max(z => z.CheckpointDuration)), }). ToList(); LineSeries maxSeries = new LineSeries { Title = "Maximum", Color = OxyColors.Firebrick, }; LineSeries avgSeries = new LineSeries { Title = "Average", }; maxSeries.Points.AddRange(data.Select(x => x.MaxPoint)); avgSeries.Points.AddRange(data.Select(x => x.AvgPoint)); lock (GlobalCheckpointLatencyPlot.SyncRoot) { GlobalCheckpointLatencyPlot.Series.Clear(); GlobalCheckpointLatencyPlot.Series.Add(maxSeries); GlobalCheckpointLatencyPlot.Series.Add(avgSeries); } GlobalCheckpointLatencyPlot.InvalidatePlot(true); }
private void ResetGlobalCheckpointLatencyPlotButton_ClickHandler(object sender, RoutedEventArgs e) { GlobalCheckpointLatencyPlot.ResetAllAxes(); }