我的表单加载时可以冻结我的UI渲染吗?

时间:2011-10-14 09:54:53

标签: c# winforms

有什么办法可以在Winforms中暂停所有UI Update命令吗?

或者我有一种轻微的感觉,我试图以完全错误的方式解决这个问题,所以还有另一种解决我问题的方法:我基本上加载一个控件的保存状态,它会在其上加载新的控件。但是我在UI线程中执行了一些操作,并从另一个线程加载了一些数据,然后填充了UI。

因此,加载时的效果是用户可以看到一些控件出现在一个位置,然后移动到窗体上的另一个位置,更改值等。

我想要一个加载屏幕而不是这个并在后台加载控件。这是一个相当大的应用程序,它并不重要,所以重新设计我的代码并不是一个真正的选择。

我可以在方法执行时简单地停止控件上的所有Update()命令吗?

2 个答案:

答案 0 :(得分:14)

您可以使用SuspendLayoutResumeLayout方法在一次操作中包装UI设置(无需更新渲染)。

基本上(假设SomeMethod在表单类中):

private void SomeMethod()
{
    this.SuspendLayout();
    // all UI setup
    this.ResumeLayout();
}

答案 1 :(得分:4)

这实际上取决于您的表单逻辑,一般情况下,您不应该使用过多的内容来重载LoadShow方法,以便可以快速显示和绘制表单,并始终保持响应。< / p>

在某些情况下,它可以帮助使用SuspendLayout和ResumeLayout方法,请参见此处: Control.SuspendLayout Method