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里面填入一個數字都要半天。
不知道這個問題如何解決?
uj5u.com熱心網友回復:
大俠,你好!我也制作了一個曲線控制元件,解決了高速實時曲線卡頓問題,你可以百度 '陜西思潤菲咪軟體科技有限公司'我的網站,下載演示示例,以后可以應用到商業開發上。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/284225.html
標籤:其他技術討論專區
下一篇:Ai選擇工具