Creo que está perfectamente bien crear múltiples bucles de mensajes en diferentes hilos. Lo único a lo que hay que tener cuidado es cuando se trata de herramientas de interfaz de usuario de terceros, a veces almacenan identificadores como miembros estáticos (en lugar de ThreadStatic) y si tiene múltiples subprocesos de interfaz de usuario en su aplicación, tendrá problemas (en mi caso, encontré que los aceleradores de teclado de la barra de herramientas/menú no funcionaban correctamente).
Una de las principales razones para hacer esto es si tiene cuadros de diálogo modales que aparecen en los diferentes cuadros de diálogo no modal. Si coloca todo en el mismo bucle de mensaje, si uno de los cuadros de diálogo no modal tiene un cuadro de diálogo modal, toda la aplicación (todas las ventanas) estará bloqueada hasta que cierre el cuadro de diálogo modal.
Y, como Kevin decía, ten cuidado con las llamadas de ventana cruzada (cross-window). Puede usar Control.BeginInvoke o Control.Invoke para publicar llamadas de delegado en los otros subprocesos de UI.
La otra cosa a considerar es cómo va a salir de su proceso. Lo más probable es que necesite realizar un seguimiento de los bucles de mensajes para poder detenerlos cuando desee cerrar todo. Si no te importa y solo quieres que el proceso finalice cuando todas las ventanas estén cerradas, puedes hacerlo también.
¿Por qué no solo ejecuta varias instancias, una por documento? –
Nuestro tiempo de inicio es muy caro y nos gustaría poder comunicarnos entre documentos sin tener que usar IPC. – fuzzyman