0

我的 mdi 表单需要很长时间才能加载,因此会给屏幕带来很多闪烁。为了防止闪烁,我使用了此处所述的 sendmessage API如何暂停控件及其子控件的绘制?. 我们暂停应用主窗体的绘制。

这样做很好,除了我们遇到了各种奇怪的行为:

  • 如果用户有一个 windows explorer 实例,并且在冻结期间移动鼠标,windows explorer 左侧窗口的某些部分开始显示在屏幕上。
  • 有时,如果用户在绘画冻结期间单击鼠标,我们的应用程序就会失去焦点。

是因为我们冻结了主窗体吗?

我们如何在加载我们的 mdi 表单时防止任何绘图而没有任何副作用?

4

1 回答 1

0

暂停/恢复在许多情况下都很棒。

然而,对于表单的加载,我更喜欢让绘图继续正常进行,但使用透明度隐藏表单,直到它完全加载。

Form f = new Form { Opacity = 0.01 };
f.Show();
f.BeginInvoke( new Action(() => f.Opacity = 0.99 ));
于 2012-10-08T16:34:59.653 回答