在 Windows 8.1 上加载时 WinForms 闪烁

WinForms flickers when loading on Windows 8.1

当我的 Windows 表单最初加载到 Windows 8.1 时,我遇到了一些闪烁效果。

起初我尝试了一些涉及启用 DoubleBuffered 的解决方案,但似乎并没有解决问题。后来我遇到了下面的解决方案,很多人说解决了他们所有的问题。但是,当我在我的 Windows 8.1 计算机上尝试修复时,它现在闪烁着一个黑框。

为了进一步研究这个问题,我尝试了下面 MSDN link 中的示例代码。但是,当加载表单时,这也会显示一个黑框。我试过在 'Advanced System Settings'->'Advanced'->'Performance Settings'->'Visual Effects' 中弄乱 Windows 8.1 视觉设置,看看是否有 Aero 或类似的透明度功能对此有任何影响,但我仍然得到一个闪烁的黑框。

None 各个线程中对此 'fix' 的评论似乎是最近的。我想知道这个 'fix' 是否应该适用于 Windows 8/8.1,如果还有其他任何东西,我可以尝试让表单及其控件立即全部显示而不会出现任何闪烁。

protected override CreateParams CreateParams {
  get {
     CreateParams cp = base.CreateParams;
     cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
     return cp;
  }
} 

https://social.msdn.microsoft.com/Forums/windows/en-US/aaed00ce-4bc9-424e-8c05-c30213171c2c/flickerfree-painting?forum=winforms

How to fix the flickering in User controls

我能够使用下面的代码让我的表单及其所有控件同时显示:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Shown += Form1_Shown;
        this.Opacity = 0;
        SampleExpensiveCreateControlOperation();
    }

    private void SampleExpensiveCreateControlOperation()
    {
        for (int ix = 0; ix < 30; ++ix)
        {
            for (int iy = 0; iy < 30; ++iy)
            {
                Button btn = new Button();
                btn.Location = new Point(ix * 10, iy * 10);
                btn.BackColor = Color.Red;
                this.Controls.Add(btn);
            }
        }
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        this.Refresh();
        this.Opacity = 1;
    }

}