ElementHost Problemas de diseño

Tengo un montón de ElementHosts que estoy cargando en mi formulario. Cuando esto sucede, todos los hosts del elemento aparecen con un fondo negro. Si traigo otro control al frente, luego cierro el otro control, los ElementHosts se repintan normalmente. Después de buscar en Google, descubrí que si subclasifico ElementHost y hago esto en el constructor

 using (CreateGraphics()) { }

The ElementHosts se dibujan con buenos fondos ... PERO, tardan unos 300 ms por elemento host en aparecer en el formulario ... y aparecen secuencialmente ... así que es como ver el formulario que se presenta ... I han, por supuesto, llamado SuspendLayout y ResumeLayout manualmente, pero esto no cambia el resultado.

¿Es solo un problema de integración de Windows Forms? ¿O hay algo que pueda hacer al respecto para que los controles aparezcan correctamente y a un ritmo razonable?

Gracias

UPDATE: puedo reproducir el problema con el código muy simple:

    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();
    }
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta