暂停主表单绘制时出现奇怪的行为

时间:2012-10-08 09:59:51

标签: c# .net winforms paint

我有mdi表单需要很长时间才能加载,因此会给屏幕带来很多闪烁。 为了防止闪烁,我使用了这里描述的sendmessage API How do I suspend painting for a control and its children?。 我们暂停了该应用的主要表单的绘制。

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

  • 如果用户后面有一个Windows资源管理器实例,并且他在冻结期间移动了鼠标,则Windows资源管理器左窗口的某些部分会开始显示在屏幕上。
  • 有时,如果用户在油漆冻结期间点击鼠标,我们的应用程序就会失去焦点。

是因为我们冻结了主表格吗?

我们怎样才能在加载mdi表格时阻止任何绘图而没有任何副作用?

1 个答案:

答案 0 :(得分:0)

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

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

Form f = new Form { Opacity = 0.01 };
f.Show();
f.BeginInvoke( new Action(() => f.Opacity = 0.99 ));