2015-06-29 20 views
1

我在Windows窗體中有一個listbox控件,用於顯示連接的串行設備的通信響應。當我想以清除listbox(稱爲Listbox1)的條目,我使用下面的代碼:刪除的條目不在C#中的列表框控件中更新

Listbox1.Items.Clear(); 

然而,似乎是,雖然上面的代碼工作完美地去除條目的第8個反應,隨後通過調用上述代碼,Listbox1中的條目不可移除。更奇怪的是,每個在Listbox1輸入新的代碼行的時候,即使我可以看看以前的條目Listbox1,所以如果我嘗試使用Listbox1.SetSelected(1, true);,我收到以下錯誤消息Listbox1.Items.Count回報1

InvalidArgument=Value of '1' is not valid for 'index' 

這意味着在Listbox1中只有1個項目,但我可以很清楚地看到Listbox1(據稱刪除的舊條目和更新的條目)中的2個項目。

請告知這裏可能會出現什麼問題。即使在撥打Listbox1.Items.Clear()之後,爲什麼仍有條目反映在Listbox1?如何清除Listbox1中的所有條目而不會看到前一個回覆留下的任何零散項目?

+0

聽起來像一個可能的**多線程**問題?你使用任何線程?如何以及何時更新列表框?...以及如何以及何時讀取其中的項目數量? –

+0

@Idle_Mind:是的,我在一個異步線程(這是一個與按鈕相關的點擊事件處理程序)內調用「Listbox1」的更新,並且「Listbox1」正在通過單獨的線程進行更新(該線程處理串行通訊)。 –

+0

...並正在更新/讀取正確調用到主UI線程?你多久更新一次UI? –

回答

0

發現解決方案 - 串行設備需要較長的時間間隔來響應某些命令(與其他命令相反),因此必須使用可變時序(某些命令的延遲較長,而其他命令的延遲較短)。利用類似的短延遲時間(100ms)導致所接收數據包的擁塞,並且即使在調用Listbox1.Items.Clear();命令(假定執行&)之後,也導致一些條目被中繼到Listbox1中,從而導致出現雜散(據稱是「刪除」)響應輸入Listbox1