Saltar al contenido

“El subproceso de llamada debe ser STA, porque muchos componentes de la interfaz de usuario requieren este” error al crear una ventana emergente de WPF en el subproceso

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:

  1. Demasiadas formas de usar Dispatcher como Dispatcher_Operation ,
    [window.dispatcher] o etc
  2. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *