OXYPlotで"System.InvalidOperationException"の例外が発生したときの対応
OXYPlotでリアルタイムにグラフを更新していると以下の画像のような例外がplotmodelから発生することがあります。
この例外を発生させないようにするには、以下のようにInvalidatePlotにfalseを設定します。
InvalidatePlot(false)
以前の記事から少しアップデートです。プログラムの最後の行が変更点です。
プログラム例
PlotViewRefreashExample.cs
var myPlotModel = new PlotModel(); //PlotModelの生成
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = 1.0 }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0, Maximum = 1.0 }); // y軸の設定
plotView1.Model = myPlotModel; // plotView1はPlotViewコントロール
LineSeries myLine = new LineSeries(); //データインスタンスを生成
myPlotModel.Series.Add(myLine); //データをPlotModelへバインド
for(int i = 0; i < 10; i++)
{
myLine.Points.Add(new DataPoint(i, i)); //データの変更
plotView1.Invalidate(); // PlotViewが更新される
myPlotModel.Axes.Clear(); // 軸の変更のため、以前の設定をクリア
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = i }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0 , Maximum = i }); //y軸の設定
myPlotModel.InvalidatePlot(false); // -- 変更点 ---
}
PlotViewRefreashExample.cs
var myPlotModel = new PlotModel(); //PlotModelの生成
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = 1.0 }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0, Maximum = 1.0 }); // y軸の設定
plotView1.Model = myPlotModel; // plotView1はPlotViewコントロール
LineSeries myLine = new LineSeries(); //データインスタンスを生成
myPlotModel.Series.Add(myLine); //データをPlotModelへバインド
for(int i = 0; i < 10; i++)
{
myLine.Points.Add(new DataPoint(i, i)); //データの変更
plotView1.Invalidate(); // PlotViewが更新される
myPlotModel.Axes.Clear(); // 軸の変更のため、以前の設定をクリア
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = i }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0 , Maximum = i }); //y軸の設定
myPlotModel.InvalidatePlot(false); // -- 変更点 ---
}
InvalidatePlotの値はtrueでもfalseでも問題無いようです。
ちなみにですが、リアルタイム更新は5msecくらいでもプログラム的には可能です。しかし、FPSの観点から60FPS(約16msec間隔)にとどめておく方が良いです。
Author And Source
この問題について(OXYPlotで"System.InvalidOperationException"の例外が発生したときの対応), 我々は、より多くの情報をここで見つけました https://qiita.com/mac8/items/d9c8b70b206043023988著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .