¿En qué punto del ciclo de vida del control deja Control.Visible la reproducción?

Estoy intentando escribir un sencillo control web para mostrar mensajes de una línea dentro de una página web: actualizaciones de estado, mensajes de error, etc. Los mensajes provendrán de otros controles de la página, llamando a un método en el control web. Si el control no tiene ningún mensaje en el momento en que llega al procesamiento previo, no quiero que se muestre en la página en absoluto, quiero que establezca Control.Visible = falso. Sin embargo, esto solo parece funcionar para la representación sin devolución de datos. Aquí está el código que estoy usando:

public class MessageList : WebControl
{

#region inner classes

    private struct MessageItem
    {
        string Content, CssClass;

        public MessageItem(string content, string cssClass)
        {
            Content = content;
            CssClass = cssClass;
        }

        public override string ToString()
        { return "<li" + (String.IsNullOrEmpty(CssClass) ? String.Empty : " class='" + CssClass + "'") + ">" + Content + "</li>"; }
    }

    private class MessageQueue : Queue<MessageItem> { }

#endregion

#region fields, constructors, and events

    MessageQueue queue;

    public MessageList() : base(HtmlTextWriterTag.Ul)
    {
        queue = new MessageQueue();
    }

    protected override void OnLoad(EventArgs e)
    {
        this.Controls.Clear();
        base.OnLoad(e);
    }

    protected override void OnPreRender(EventArgs e)
    {
        this.Visible = (queue.Count > 0);

        if (this.Visible)
        {
            while (queue.Count > 0)
            {
                MessageItem message = queue.Dequeue();
                this.Controls.Add(new LiteralControl(message.ToString()));
            }
        }

        base.OnPreRender(e);
    }

#endregion

#region properties and methods

    public void AddMessage(string content, string cssClass)
    { queue.Enqueue(new MessageItem(content, cssClass)); }

    public void AddMessage(string content)
    { AddMessage(content, String.Empty); }

#endregion

}

Intenté poner el cheque dentro de CreateChildControls también, con el mismo resultado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta