【问题标题】:Can I freeze my UI rendering while my form loads?我可以在我的表单加载时冻结我的 UI 渲染吗?
【发布时间】:2011-10-14 18:00:50
【问题描述】:

有什么方法可以暂停 Winforms 中的所有 UI 更新命令?

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

所以我在加载时的效果是用户可以看到一些控件出现在一个地方,然后移动到表单上的另一个地方,改变值等等。

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

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

【问题讨论】:

  • 我的建议 - 渲染时不要显示表单。如果您冻结 UI,用户可以看到空表单,并且在一段时间后会出现所有控件。
  • 没关系,抱歉我没有解释这一点。默认表单包含此控件的空白版本,然后用户可以拖动控件并选择某些选项、添加新控件等,然后将控件的状态保存到 XML。此问题适用于用户决定打开现有文件的情况。

标签: c# winforms


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

这真的取决于你的表单逻辑,一般来说你不应该用太多的东西重载LoadShow 方法,以便可以快速显示和绘制表单并且总是看起来响应。

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

【讨论】:

  • 它不在负载上。控件加载最初在设计器代码中,它加载一个空白控件,因此。但是控件上有一个 LoadData 方法,它在提示用户打开文件后从 XML 文件加载表单状态。
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多