【发布时间】:2013-08-09 17:47:10
【问题描述】:
我有一个很大的表单,上面有很多控件(50+)。显示所有这些的逻辑一点也不复杂,只需根据用户的不同进行一些检查。我已经尝试实现一个后台工作程序,但是它加载得更快,控件仍然滞后并等待 UI 线程完成,然后再加载被扔进后台工作程序的控件。还有其他选择吗?只是想看看 3.5 有哪些类型的选项:)
【问题讨论】:
-
@HighCore - "winforms 不支持大 UI" 什么?你从哪儿弄来的? WinForms 对大型 UI 提供了极好的支持。 WPF 是为了更好的可维护性而开发的(通过使适当的体系结构更易于使用),但是如果您对其应用良好的体系结构,WinForms 就可以很好地扩展。我见过带有成百上千个控件的 WinForms 都可以正常工作。
-
@Criel - 不幸的是,您遇到的问题无法通过简单的设置或稍作调整来解决。您正在研究如何加载数据和表单的系统性问题。您将需要了解有关这些主题的更多信息,然后退后一步进行设计以减少 UI 延迟时间。这可能意味着在后台线程上逐步加载数据,或者将您的庞大表格分成多个部分。但是,盲目地切换到 WPF 可能对您没有帮助。 (另外 WPF 有一个巨大的学习曲线。)
-
@Cyborgx37 - 我想会是这样。我进入这个程序已经被破坏并且需要一些修复。由于所需更改的复杂性,返工或重新格式化将很难做到。可惜一开始就是这样建造的。我会继续我的研究,谢谢大家的意见!
-
@Criel - 例如,50 个延迟仅为 0.1 秒的查询本身将花费您 5 秒的加载时间,更不用说绘制这些控件等了。将这些查询组合到单个事务可以为您节省大量时间,但您需要某种架构来协调所有数据并确保每个控件都能获得所需的信息。
-
还有一些常见的错误,比如向表单添加控件,然后移动它,然后调整它的大小,需要三个(昂贵的)绘画。 BeginUpdate 在实施时可以帮助一些人。 (或者只是将控件的可见性设置为隐藏、添加、移动、调整大小然后显示等)