2013-08-05 61 views
0

我正在開發一個WPF應用程序,它將讀取串行端口上的數據,解析它並將其顯示在UI上。UI在讀取串行端口數據時凍結

我必須使用串行端口布阿島率 - 115200,數據位 - 8,停止位 - 1

我將通過我的WPF應用程序可以讀取串口上每秒發送10000個字節。

但是,在這裏,我面臨的用戶界面問題。當我開始閱讀COM端口時,我的UI凍結。它不允許任何人做任何事情。根據我的調查,這是由於數據的高速度。

  1. 我正在閱讀不同線程上的com端口,並且UI正在不同的線程上運行。
  2. 線程之間的數據傳輸是使用公共循環緩衝區完成的。
  3. 我確實使用了BeginInvoke方法來更新UI字段,所以函數立即返回。
  4. 我確實在訪問兩個線程中的循環緩衝區時使用了鎖定機制。

有沒有辦法處理這種情況?我讀過很多面臨同類問題的人。什麼是可以解決這個問題的解決方案。

感謝, 維沙爾ñ

+1

請顯示一些代碼。 – Diryboy

+0

你確定你在不同的線程?您的端口讀取完成嗎?請張貼一些代碼。 – Sonhja

+1

第3步是問題,你經常這樣做。用戶界面無法跟上。只要做得更少,你只需要保持人眼忙碌。他們看不到更新速度超過每秒20次的任何內容。緩衝收到的數據,直到獲得完整的響應。最大限度地減少您在用戶界面上轉儲的信息量。 –

回答

0

這聽起來好像你要麼設置了Thread對象(S)不正確,或者您傳遞反饋回用戶界面過於頻繁。

如果您對直接使用Thread對象感到不舒服,也許BackgroundWorker類可能會對您有所幫助。查看MSDN上的BackgroundWorker Class頁面。