XamlReader.Load en un hilo de fondo. ¿Es posible

Una aplicación WPF tiene la operación de cargar un control de usuario desde un archivo separado usandoXamlReader.Load() método:

StreamReader mysr = new StreamReader(pathToFile);
DependencyObject rootObject = XamlReader.Load(mysr.BaseStream) as DependencyObject;
ContentControl displayPage = FindName("displayContentControl") as ContentControl;
displayPage.Content = rootObject;

El proceso lleva algún tiempo debido al tamaño del archivo, por lo que la IU se congela durante varios segundos.

Para mantener la aplicación receptiva, trato de usar un subproceso en segundo plano para realizar la parte de la operación que no se invoca directamente en la actualización de la interfaz de usuario.

Cuando intente usarBackgroundWorker Recibí un error:l subproceso de llamada debe ser STA, porque muchos componentes de la interfaz de usuario requieren este

Entonces, fui por otro lado:

 private Thread _backgroundThread;
 _backgroundThread = new Thread(DoReadFile);
 _backgroundThread.SetApartmentState(ApartmentState.STA);
 _backgroundThread.Start();
 void DoReadFile()
 {
   StreamReader mysr3 = new StreamReader(path2);
   Dispatcher.BeginInvoke(
           DispatcherPriority.Normal,
           (Action<StreamReader>)FinishedReading,
           mysr3);
 }

 void FinishedReading(StreamReader stream)
    {            
        DependencyObject rootObject = XamlReader.Load(stream.BaseStream) as DependencyObject;
        ContentControl displayPage = FindName("displayContentControl") as ContentControl;
        displayPage.Content = rootObject;
    }

Esto no resuelve nada porque todas las operaciones que consumen mucho tiempo permanecen en el hilo de la interfaz de usuario.

Cuando intento de esta manera, haciendo todo el análisis en segundo plano:

private Thread _backgroundThread;
_backgroundThread = new Thread(DoReadFile);
_backgroundThread.SetApartmentState(ApartmentState.STA);
_backgroundThread.Start();
 void DoReadFile()
 {
  StreamReader mysr3 = new StreamReader(path2);      
  DependencyObject rootObject3 = XamlReader.Load(mysr3.BaseStream) as DependencyObject;
        Dispatcher.BeginInvoke(
           DispatcherPriority.Normal,
           (Action<DependencyObject>)FinishedReading,
           rootObject3);
  }

  void FinishedReading(DependencyObject rootObject)
  {            
    ContentControl displayPage = FindName("displayContentControl") as ContentControl;
    displayPage.Content = rootObject;
  } 

Tengo una excepción: El hilo de llamada no puede acceder a este objeto porque lo posee un hilo diferente. (en el UserControl cargado hay otros controles presentes que pueden dar el error)

Existe alguna forma de realizar esta operación de tal manera que la IU responda?

Respuestas a la pregunta(5)

Su respuesta a la pregunta