Joaquín, parte de nuestro equipo, nos hizo el favor de redactar este post porque conoce perfectamente dicho tema.
Solución:
Para el subproceso en el que está intentando iniciar el elemento GUI, debe establecer el estado del apartamento del subproceso en STA ANTES DE tú lo empiezas.
Ejemplo:
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
Absolutamente Dispatcher
¡Es la única forma de hacer algo (en un subproceso específico) cuando trabajamos con subprocesos múltiples en WPF!
Pero para trabajar con Dispatcher debemos saber 2 cosas:
- Demasiadas formas de usar Dispatcher como Dispatcher_Operation ,
[window.dispatcher] o etc - Debemos
call dispatcher in the main thread of app
(ese hilo debe ser un hilo STA)
Así por ejemplo: si queremos mostrar otros ventana[wpf] en otro hilo, podemos usar este código:
Frmexample frmexample = new Frmexample();
frmexample .Dispatcher.BeginInvoke //Updated the variable name
(System.Windows.Threading.DispatcherPriority.Normal,
(Action)(() =>
frmexample.Show();
//---or do any thing you want with that form
));
Consejo:Remember - we can't access any fields or properties from out dispatcher, so use that wisely
Recuerda que tienes la opción de valorar esta crónica si diste con la contestación.