Manejo de eventos desde un servidor COM fuera de proceso en la aplicación STA administrada

Aparentemente, los controladores administrados para eventos, originados en un servidor COM fuera de proceso no administrado, se devuelven a un subproceso de agrupación aleatorio, en lugar de al subproceso STA principal (como es de esperar). Descubrí esto mientras respondía una pregunta enAutomatización de Internet Explorer. En el código de abajo,DocumentComplete se dispara en un subproceso no UI (por lo que"Event thread" no es lo mismo que"Main thread" en la salida de depuración). Por lo tanto, tengo que usarthis.Invoke para mostrar un cuadro de mensaje. Según mi conocimiento, este comportamiento es diferente de los clientes COM no administrados, donde los eventos a los que se suscribió desde un subproceso STA se devuelven automáticamente al mismo subproceso.

¿Cuál es la razón detrás de tal desviación del comportamiento tradicional de COM? Hasta ahora, no he encontrado ninguna referencia que confirme esto.

using System;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;

namespace WinformsIE
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs ev)
        {
            var ie = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.Application"));
            ie.Visible = true;
            Debug.Print("Main thread: {0}", Thread.CurrentThread.ManagedThreadId);
            ie.DocumentComplete += (object browser, ref object URL) =>
            {
                string url = URL.ToString();
                Debug.Print("Event thread: {0}", Thread.CurrentThread.ManagedThreadId);
                this.Invoke(new Action(() =>
                {
                    Debug.Print("Action thread: {0}", Thread.CurrentThread.ManagedThreadId);
                    var message = String.Format("Page loaded: {0}", url);
                    MessageBox.Show(message);
                }));
            };
            ie.Navigate("http://www.example.com");
        }
    }
}