我正在开发一个性能监视器,显示将某些x / y点绘制为AreaSeries。为了演示我几秒钟更新我的视图并添加测量点。由于InvalidOperationException
,我需要在Dispatcher之间添加点。我希望实时看到添加的点 - 但视图不会更新。这些点或其他任何东西都没有问题,因为之前添加了所有点,我得到了我的情节。
.xaml文件
<UserControl x:Class="Gauge_3.PerformanceMonitor"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Gauge_3"
xmlns:oxy="http://oxyplot.org/wpf"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<oxy:PlotView x:Name="fMonitor" Grid.Row="0" HorizontalContentAlignment="Stretch"/>
<oxy:PlotView x:Name="sMonitor" Grid.Row="1"/>
<oxy:PlotView x:Name="nMonitor" Grid.Row="2"/>
</Grid>
</UserControl>
.cs片段,从另一个类调用
public void PlotRealTime(double percent)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
DataPoint dPoint = new DataPoint(new DateTime(2017, 01, 01, 14, internalCounter, 00).ToOADate(), percent);
sArea.Points.Add(dPoint);
if (internalCounter == 0)
sMonitor.Model.Series.Add(sArea);
sMonitor.Model.InvalidatePlot(true);
}));
internalCounter++;
}