MsChart поддерживает это напрямую, и действительно, использование Series.SuspendUpdates()
- хороший способ, но вы должны сделать это правильно.(Однако недостаток см. В приведенном ниже обновлении)
MSDN говорит об этом:
Вызов метода Invalidate не будет иметьэффект после вызова метода SuspendUpdates.
Если вы вызываете метод SuspendUpdates несколько раз, вам потребуется вызвать метод ResumeUpdates , равный числу раз.
Это объясняет, почему это не работает для вас: сохранение вызовов сбалансированным имеет решающее значение.Вы должны следить за ними самостоятельно, так как нет счетчика, который вы могли бы запросить.Но если вы отклоните вызовы ResumeUpdates
, ничего плохого не произойдет, дополнительные вызовы просто игнорируются, а следующий SuspendUpdates
снова приостановится.
Вот пример снимка экрана, посмотрите счетчик приостановки ..!
Обратите внимание, что обычно добавление точек автоматически вызывает Invalidate
.Если вы занимаетесь другими вещами, такими как рисование в событии Paint
и т. Д., Вам может потребоваться позвонить Chart.Invalidate()
, что SuspendUpdates
предотвратит, пока не будет отменено с тем же номером ResumeUpdates
..
В качестве альтернативы вы также можете использовать один из следующих простых способов:
- Самый простой способ - создать
DataPoints
через конструктор, а затем либо - использовать
series.Add(theNewPoint)
для обычный или .. - используйте
someList<DataPoint>.Add(theNewPoint)
для режим паузы .
При установке наВ режиме паузы просто добавьте все точки к series.Points
перед его очисткой.К сожалению, points.AddRange
нет, поэтому вам придется использовать цикл foreach
.Может быть, chart.SuspendLayout
может помочь с производительностью.
- Другой обходной путь, который приходит на ум, может подходить или не подходить: вы можете играть с
xAxis.Maximum
и, возможно, xAxis.Minimum values
.Установив для них фиксированные значения, вы позволите добавлять точки справа, не отображая их.Чтобы показать весь набор точек, вы должны сбросить их на double.NaN
.Это может работать для вас, но может также мешать тому, что у вас есть.
Обновление: Как отметил OP, данные обновляются, когда он изменяет Minimum
и /или Maximum
из Axis
.Этот же эффект будет проявляться во многих других случаях:
- Вызов
chart.AreasRecalculateAxesScale();
- Изменение
Size
- Изменение оси любой свойство типа
Color
или Width
.. - Изменение
LegendText
из Series
- и многие другие ..
Так что я думаюобновленные данные необходимы всякий раз, когда ChartArea
манипулируют и вынуждены обновлять себя.
Таким образом, это может сделать первый обходной путь лучше, потому что более надежное решение .