频繁绘图导致界面卡顿
WPF做界面,通过调用硬件提供的DLL来控制数据采集,每次采集8192个点。需要进行循环采样,用来调试一些参数是否合适(采样点数固定为8192)。我用了一个bool IsRunning来判断机器是否正在采样。
整个逻辑是: ToggleButton Check->
提交参数->采样->(采样结束后)显示数据->提交参数->采样->显示数据->...
除非ToggleButton UnCheck,否则一直循环。在整个过程中,用户可以任意更改某个参数。
一开始的时候,我在ToggleButton的Check事件回调函数里面直接用while循环来确保采样结束后才取数据并显示
while (Iface.IsRunning()) { };//然后再GetData (硬件DLL提供)
这样做了之后发现界面会假死,百度说是要用后台线程来取数据和更新绘图,但是取数据要用到DLL中的GetData,而GetData一放到后台线程中就报“外部组件发生错误”(不知道为何~)
于是,我又换成了
TimerGS = new DispatcherTimer(DispatcherPriority.Render);
TimerGS.Tick += new EventHandler(TimerGS_Tick);
TimerGS.Interval = new System.TimeSpan(0, 0, 0, 0, 10);
private void TimerGS_Tick(object sender, EventArgs e)
{
if (vm.Interrupt)
{
topScan();
IsRunning = false;
TimerGS.Stop();
return;
}
if (IsRunning())
{
IsRunning = true;
return;
}
IsRunning = false; //IsRunning 是属性也是函数,不知道为何会这样,但是确实不报错~
commitParameter();
StartScan();
while (IsRunning()) { };
data = new TComplex[len];
GetData(data, len);
UpdateData();
SamplingPlot.InvalidatePlot(true);
System.Diagnostics.Debug.WriteLine("Tick Tick Tick...");
}
这样做下来功能是实现了,界面也没有假死,但是,界面变得非常卡顿,TextBox里面填入一个数字都要半天。
不知道这个问题如何解决?