2013-07-01 46 views
0

我有關於串口通信和數據存儲的一般問題。在與串口進行通信時(在這種情況下,嚴格從端口讀取數據)如何才能在vb.net中存儲和操作數據?對於我的項目,我需要從串行端口獲取字符串,然後從這些字符串中提取數字並對它們進行排序(數字上,即最高數字位於頂部,最低數字位於底部)由於某些原因,在我的代碼中當我嘗試將數據從字符串移動到字符串數組時,我會遇到內部異常錯誤,但我決定將其解決。串口通訊和richtextbox?

作爲與串口通信相關的vb.net編程方面的一般性問題,使用背景工作者是否聰明?例如,我可以/應該使用背景工作來處理從串口讀取數據,然後在背景工作之外對數據進行算術運算?我基本上只是試圖將我的數據從我的串行端口存儲到一個數組中,但我不知道數組有多大才能存儲數據(即我不知道我有多少次'將數據發送到我的串口)

任何提示/信息將不勝感激!謝謝

+0

這裏有太多的問題。將其分解爲2併爲其中一個打開另一個問題,一個是如何從串口讀取數據 - 是否有任何代碼?另一個是如何存儲一組未知大小的數據 - 你需要使用集合 - 例如列表(字符串)。 – RobS

回答

0

作爲一般的規則,如果將要有任何長期運行的任務,你應該運行它在一個單獨的線程。您可以這樣做,以便用戶體驗不受影響,GUI保持響應。

在串行通信的情況下,通常會有一個輪詢響應體系結構,它需要不斷的事件處理。

在我的實驗中,我很成功地處理與串口相互作用,在一個單獨的線程中將事件吹響到GUI。這樣我就可以處理要顯示或存儲在另一個獨立線程中的數據,並保持輪詢幾乎實時運行。

當我在使用寄存器時,我會以多種不同的方式存儲它們,但從您所描述的內容來看,這聽起來像您正在消費的數據最好存儲在List(of String)中。

這個結構可以被添加到幾乎無限的和通過使用謂詞可以被排序。 .net中的List結構也有一個方法可以根據需要將其自身轉換爲數組。

因此,這裏是我能想象你的互動:

  • 的GUI線程啓動,你initate到您的設備的連接。
  • 然後您將設置一個線程,該線程將接收來自設備的傳入通信
  • 在此線程中,當捕獲數據時,它將觸發GUI中的事件。
  • 在GUI事件處理程序中,數據存儲在一個列表中,如果需要對其執行操作,它們將在另一個具有回調處理程序的處理線程中完成。
  • 在回調中,您可以顯示或推送數據到其最終目的地。

的關鍵點是,如果你使用的是圖形用戶界面,你應該是絕對有一個單獨的線程的通信maintian GUI的穩定創造了良好的用戶的experiance。

+0

我其實已經想出瞭如何自己做我想做的事情,它花了很長時間,畢竟我並不需要使用多線程:P感謝您的幫助,雖然我很高興它的工作 –

+0

。你應該發佈你的解決方案作爲答案,我會很好奇看到它。 –