【发布时间】:2010-10-20 14:00:48
【问题描述】:
下图显示了我的代码是如何工作的。当我按下按钮 2 时,列表框会更新,但当我按下按钮 1 时不会。为什么?
问题与线程有关吗?如果是,我应该在哪里添加对 (Begin)Invoke 的调用?
需要注意的一个有趣的事情是,如果我先按 button1,然后按 button2,那么当我点击 button2 时,会显示 button1 点击生成的数据。所以看起来 doFoo 生成的数据在某处缓冲,然后在我按下 button2 后推送到列表框。
编辑:
我尝试将 AddNumber 添加到表单代码中,并在 listBox1.InvokeRequired 返回 true 时添加对 Invoke 的调用。这解决了问题,但不是最好的设计。我不希望 GUI 不得不“担心”如何将项目添加到作为模型一部分的列表中。
如何保持添加到列表类内部列表背后的逻辑,同时在列表更改时仍更新 gui?
编辑 2:
既然我们已经确认这是一个线程问题,我已经更新了图像以更准确地反映我正在处理的实际代码的设计。
虽然 Lucero 的建议仍然可以解决问题,但我希望得到一些不需要表单来了解有关 dll 或 CDllWrapper 的任何内容。
模型(ListBoxDataBindingSource 等)应该对视图(列表框、按钮、标签等)一无所知
【问题讨论】:
标签: c# winforms multithreading data-binding listbox