下圖顯示了我的代碼如何工作。當我按下按鈕2時,列表框被更新,但不是當我按下按鈕1時。爲什麼?當綁定的數據發生變化時,Winforms listbox不會更新
pseudo code http://i44.tinypic.com/mj69oj.gif
是線程相關的問題?如果是,我應該在哪裏添加調用(Begin)Invoke?
一個有趣的事情要注意的是,如果我先按下按鈕1,然後按下按鈕2 button1生成的數據點擊顯示當我點擊button2。所以看起來doFoo產生的數據被緩衝到某個地方,然後一旦我按下按鈕2就將其推送到列表框。
編輯:
我嘗試添加AddNumber到表單代碼,並添加調用調用時listBox1.InvokeRequired返回true。這解決了這個問題,但並不是最好的設計。我不希望GUI必須「擔心」如何將項目添加到模型的一部分列表中。
如何保持添加到列表類內部列表的邏輯,同時在列表更改時仍然更新gui?
編輯2:
現在,我們已經確認這是一個線程問題我已經更新了圖像更密切地反映我工作的實際代碼的設計。
雖然Lucero的建議仍然解決了這個問題,但我希望有一些不需要表單的知道任何有關dll或CDllWrapper的東西。
模型(ListBoxDataBindingSource等)應該知道什麼都沒有對視圖(列表框,按鈕,標籤等)
我明白是什麼問題,現在我們只需要想出一個好的解決方案:) 我試圖根據MVC模式設計這個,所以讓ListBoxDa taBindingSource(模型的一部分)知道控件(視圖的一部分)通常被認爲是不好的做法。 – Tobbe 2009-04-20 15:51:57
嗯,它並不是真正瞭解控件,但只需要知道熱將編組調用添加到正確的線程即可。你可以讓自己的編組類知道控制權,並將其傳遞給列表,以便正確隱藏這個方面。 – Lucero 2009-04-20 16:38:45