我有一个带有 2 个选项卡的表单。第一个选项卡很无聊,第二个选项卡(默认情况下用户看不到)包含许多组合框。
使用 FormLoad() 事件,我在后台线程的第二个选项卡上填充一个组合框(包含大约 11,000 个项目/字符串)。执行此操作的 sql 命令也是异步的。
现在,理论上这应该意味着,当用户最终点击第二个选项卡时(无论是 10 秒还是 10 小时),他们应该立即看到一个填充良好的控件 - 但总是有一个 4第二次延迟。我就是不明白!如果所有繁重的工作都是通过后台线程完成的(这就是首先使用它们的全部原因!),为什么当用户单击该该死的第二个选项卡时我的应用程序仍然缓慢且无响应???!!!?!
*请记住,您必须首先让应用程序有机会填充组合,而且我知道它何时完成填充,因为 backgroundWorker1_RunWorkerComplete() 方法会触发并发送调试消息来告诉我所有工作已完成.*
任何帮助将不胜感激......
最佳答案
11,000 已经很多了!已完成在后台线程上填充组合框项目的工作,但表单仍必须显示所有这些项目。这意味着 UI 线程必须将其中一部分(或全部)渲染到 UI(进入内存)以准备滚动;这需要时间。
我建议重写ComboBox
控件并自己处理滚动事件。这样,您可以在需要时顺序加载整个列表的子集(如果您的情况可能的话)。这将防止您所说的四秒延迟。
关于winforms - 在后台线程上填充组合时,表单的响应速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666673/