令人讨厌的慢响应形式,同时在背景线程上填充组合

时间:2012-03-12 12:04:01

标签: winforms data-binding

我有一个包含2个标签的表单。第一个选项卡很无聊,第二个选项卡(默认情况下看不见用户)包含许多组合框。

使用FormLoad()事件我在后台线程上的第二个选项卡上填充了一个组合框(大约有11,000个项/字符串)。执行此操作的sql命令也是异步的。

现在,理论上这应该意味着当用户最终点击第二个标签(无论是10秒还是10个小时)时,他们应该立即显示一个人工控制的控件 - 但总有一个4第二次延迟。我只是不明白!如果所有繁重的工作都是通过后台线程完成的(首先使用它们的全部原因!),为什么当用户点击那个第二个标签时,我的应用程序仍然很慢并且没有响应?!!

*请记住,您必须首先给应用程序填充组合,并且我知道它何时完成填充,因为backgroundWorker1_RunWorkerComplete()方法触发并发送调试消息告诉我所有工作已完成*

任何帮助将不胜感激....

1 个答案:

答案 0 :(得分:2)

11,000很多!已经完成了在后台线程上填充comboBox项目的工作,但表单仍然必须显示所有这些项目。这意味着UI线程必须将它们中的一部分(或所有这些)呈现给UI(进入内存)以备滚动;这是需要时间的。

我建议覆盖ComboBox控件并自己处理滚动事件。这样,您可以在需要时按顺序加载整个列表的子集(如果可以的话)。这样可以防止你说的四秒延迟。