【发布时间】:2014-08-26 21:09:14
【问题描述】:
我正在做一个大项目。我的表单是form1的mdi容器。 form1 加载太慢,我可以看到正在绘制的控件。
每个表单都有一个更新方法,但我仍然有同样的问题。我无法使用任务创建新表单。
这是我的代码
form1.MdiParent = Me
form1.Show()
我的表单有 40 多个控件(文本框、标签、网格视图 ...),是的,它是繁重的 UI。是否有任何解决方案可以利用并发技术,例如:任务、异步等待?
【问题讨论】:
-
很难弄清楚你在问什么。你有一个具体的问题让它更容易吗?就目前而言,这个问题似乎非常广泛,没有任何澄清,它可能会被关闭。
-
WinForms 在显示带有许多控件的表单时总是很慢,您可以尝试几件事来加快该过程,可能最有效的方法可能是处理来自 WndProc 的 WM_PAINT 消息为避免重绘,当所有控件都准备好时,您可以取消阻止消息并刷新表单。我没有将此作为答案,因为我没有为您提供正确的代码,所以我更愿意发表评论,因为您需要检查不同的组合(如双缓冲和离屏渲染 + WM_PAINT 方法)才能找到正确的给你的方式
-
@JesusSalas 我只是好奇。你屏蔽了
WM_PAINT。什么都没有画出来。然后你刷新。一切都画好了。怎么这么快。双缓冲不用于更快的绘图,而是用于更流畅的动画或避免闪烁问题。最后,您不必阻止WM_PAINT。只需将所有控件的可见性设置为 false 即可。 -
@valter 如果我没记错的话(几年前我在使用 WinForms 的大型项目中遇到过同样的问题),它更快的原因与您在设置表单无效,导致所有子控件的重绘,然后阻止主表单重绘,直到所有控件都添加到 Children 集合并且一切准备就绪,避免这种情况发生,加快进程,因为我不记得所有关于我如何实现此解决方法的详细信息,我只想提供一些提示。我会试着写一些代码来提供一个准确的答案。
标签: c# .net vb.net performance winforms