Imprimir el contenido de un DocumentViewer en un hilo de interfaz de usuario diferente

En mi aplicación WPF, tengo particularWindow que contiene, entre otros controles, unaDocumentViewer.

Cuando esta ventana se abre y se carga, genera dinámicamente unaFixedDocument con un indicador de progreso, y luego lo muestra en laDocumentViewer. Funciona y, para mejorar la experiencia del usuario, ejecuto esta ventana en su propio hilo, de modo que la ventana principal de la aplicación aún responde mientras se está creando el documento.

Basado en los consejos enesta página web, Abro mi ventana en un nuevo hilo como este:

public void ShowDocumentViewerWindow(params object[] data) {
    var thread = new Thread(() => {
        var window = new MyDocumentViewerWindow(new MyObject(data));
        window.Closed += (s, a) => window.Dispatcher.InvokeShutdown();
        window.Show();
        System.Windows.Threading.Dispatcher.Run();
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

He estado contento con esta configuración hasta ahora, pero me encontré con un problema.

MyDocumentViewerWindow contiene un botón de impresión, que hace referencia al comando de impresión incorporado, dirigido al DocumentViewer:

<Button Command="Print" CommandTarget="{Binding ElementName=MyDocumentViewer}">Print</Button>

Antes de tener la ventana en su propio hilo, esto funcionó bien. Pero ahora, cuando hago clic en él, la aplicación se bloquea. Visual Studio 2010 resalta la siguiente línea del código anterior como la ubicación del bloqueo, con el mensaje ' El hilo de llamada no puede acceder a este objeto porque lo posee un hilo diferente. ':

System.Windows.Threading.Dispatcher.Run();

El seguimiento de la pila comienza así:

at System.Windows.Threading.Dispatcher.VerifyAccess()
at MS.Internal.Printing.Win32PrintDialog.ShowDialog()
at System.Windows.Controls.PrintDialog.ShowDialog()
at System.Printing.PrintQueue.GatherDataFromPrintDialog(PrintDialog printDialog, XpsDocumentWriter&amp;amp; writer, PrintTicket&amp;amp; partialTrustPrintTicket, PrintQueue&amp;amp; partialTrustPrintQueue, Double&amp;amp; width, Double&amp;amp; height, String jobDescription)
at System.Printing.PrintQueue.CreateXpsDocumentWriter(String jobDescription, PrintDocumentImageableArea&amp;amp; documentImageableArea)
at System.Windows.Controls.Primitives.DocumentViewerBase.OnPrintCommand()
at System.Windows.Controls.Primitives.DocumentViewerBase.ExecutedRoutedEventHandler(Object target, ExecutedRoutedEventArgs args)
...

Mi presentimiento es que el cuadro de diálogo de impresión se está abriendo en el hilo principal de la interfaz de usuario y está intentando acceder al documento creado y propiedad de mi propio hilo, de ahí el bloqueo.

¿Alguna idea de cómo puedo resolver esto? Me gustaría mantener la ventana en su propio hilo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta