我正在使用後臺工作人員從設備讀取數據值並顯示在chart.mI中使用BeginInvoke並更新圖表中的值。問題在於,圖表中的值在圖表中得到更新,延遲時間至少爲2 - 3秒,並非實時。圖表中更新的速度也會有所不同,圖表會在一瞬間更新所有以前的值。後臺工作人員和圖表更新
我該如何使它成爲實時?任何幫助,高度讚賞。
我正在使用後臺工作人員從設備讀取數據值並顯示在chart.mI中使用BeginInvoke並更新圖表中的值。問題在於,圖表中的值在圖表中得到更新,延遲時間至少爲2 - 3秒,並非實時。圖表中更新的速度也會有所不同,圖表會在一瞬間更新所有以前的值。後臺工作人員和圖表更新
我該如何使它成爲實時?任何幫助,高度讚賞。
我懷疑你有太多更新,它佔用了消息隊列。消息可能會按順序到達。您可以將多個更新整合到一個BeginInvoke
中。或者,您可以讀取設備中的所有值,並僅通過Invoke
提供最新值。 Invoke將確保它在您的下一個Invoke
之前交付。
我會建議2個選項之一。
1)使圖表本身嵌入withing主界面,並使用調用,而不是BeginInvoke的更新圖表獨立的WPF形式(更新時,這將凍結圖表UI,但誰在乎)
2)使用UI側的DispatchTimer來拉取數據,而不是將處理推送到UI ......在我的經驗中,BeginInvoke從來沒有表現得很好。
我無法使用選項一,因爲我無法使用它。我可以嘗試選項2。 – Vishnu 2011-05-27 06:53:46
這就是我所說的UI爭用。 BeginInvoke異步編程的本質依賴於從源拉取並推送到UI。我懷疑你的BeginInvoke在這裏需要更多的時間。我將嘗試「DispatchTimer」或者如果您使用的是C#4.0,請嘗試使用「任務」。
我無法一次讀取設備中的所有值。這是一個用戶交互系統。根據用戶的反饋,設備將發送不同的值 – Vishnu 2011-05-27 06:49:36
直到緩衝區清除。換句話說,直到沒有更多的數據正在等待。 – 2011-05-27 06:56:03