2011-05-27 108 views
1

我正在使用後臺工作人員從設備讀取數據值並顯示在chart.mI中使用BeginInvoke並更新圖表中的值。問題在於,圖表中的值在圖表中得到更新,延遲時間至少爲2 - 3秒,並非實時。圖表中更新的速度也會有所不同,圖表會在一瞬間更新所有以前的值。後臺工作人員和圖表更新

我該如何使它成爲實時?任何幫助,高度讚賞。

回答

0

我懷疑你有太多更新,它佔用了消息隊列。消息可能會按順序到達。您可以將多個更新整合到一個BeginInvoke中。或者,您可以讀取設備中的所有值,並僅通過Invoke提供最新值。 Invoke將確保它在您的下一個Invoke之前交付。

+0

我無法一次讀取設備中的所有值。這是一個用戶交互系統。根據用戶的反饋,設備將發送不同的值 – Vishnu 2011-05-27 06:49:36

+0

直到緩衝區清除。換句話說,直到沒有更多的數據正在等待。 – 2011-05-27 06:56:03

2

我會建議2個選項之一。

1)使圖表本身嵌入withing主界面,並使用調用,而不是BeginInvoke的更新圖表獨立的WPF形式(更新時,這將凍結圖表UI,但誰在乎)

2)使用UI側的DispatchTimer來拉取數據,而不是將處理推送到UI ......在我的經驗中,BeginInvoke從來沒有表現得很好。

+0

我無法使用選項一,因爲我無法使用它。我可以嘗試選項2。 – Vishnu 2011-05-27 06:53:46

0

這就是我所說的UI爭用。 BeginInvoke異步編程的本質依賴於從源拉取並推送到UI。我懷疑你的BeginInvoke在這裏需要更多的時間。我將嘗試「DispatchTimer」或者如果您使用的是C#4.0,請嘗試使用「任務」。