roblemas de layout @ElementHost

Eu tenho um monte de ElementHosts que estou carregando no meu formulário. Quando isso acontece, todos os hosts do elemento são exibidos com um plano de fundo preto. Se eu colocar outro controle para a frente e fechar o outro controle, os ElementHosts serão repintados normalmente. Depois de pesquisar no Google, descobri que se eu subclasse ElementHost e faço isso no construtor

 using (CreateGraphics()) { }

Os ElementHosts são todos desenhados com bons antecedentes ... MAS, eles demoram cerca de 300 ms por host do elemento para aparecer no formulário ... e aparecem sequencialmente ... então é como assistir o formulário sendo organizado ... I , naturalmente, chamaram SuspendLayout e ResumeLayout manualmente, mas isso não altera o resultad

Isso é apenas um bug de integração do Windows Forms? Ou há algo que eu possa fazer para fazer com que os controles apareçam corretamente e a uma taxa razoável?

Obrigado

UPDATE: Consigo reproduzir o problema com o código muito simples:

    public partial class TestControl2 : UserControl
    {
        public TestControl2()
        {
            InitializeComponent();
        }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        // deferring load with the BackgroundWorker seems to be related to the problem here...
        var bw = new BackgroundWorker();
        bw.DoWork += delegate { Thread.Sleep(2000); };
        bw.RunWorkerCompleted += delegate
        {
            int x = 0;
            int y = 0;
            for (int i = 0; i < 20; i++)
            {
                var control = new Panel();
                control.Width = 200;
                control.Height = 80;
                control.Controls.Add(new ElementHost { Child = new System.Windows.Controls.Label { Content = @"Hello" }, Dock = DockStyle.Left, Size = new System.Drawing.Size(75, 23) });
                control.Controls.Add(new ElementHost { Child = new System.Windows.Controls.Button { Content = @"button" }, Dock = DockStyle.Fill });
                var uc2 = new UserControl();
                uc2.Controls.Add(control);
                control.Dock = DockStyle.Fill;
                uc2.Left = x;
                uc2.Top = y;
                x += control.Width + 10;
                // adding using (uc2.CreateGraphics()) {} fixes the problem but slows down the load so it looks like each UserControl is being added one at a time
                panel1.Controls.Add(uc2);
            }
        };

        bw.RunWorkerAsync();
    }
    }

questionAnswers(2)

yourAnswerToTheQuestion