¿Cómo puedo forzar la ejecución de una sección de código en mi hilo principal?Forzar la ejecución del código en el hilo principal
Esto es por eso que me gustaría saber:
Tengo un cuadro de mensaje personalizado creado que a veces consigue muestra de un hilo que no es el hilo principal. Sin embargo, cuando se llama al constructor del cuadro de mensaje obtengo una InvalidOperationException que dice "El hilo que llama debe ser STA, porque muchos componentes de UI lo requieren". Esto tiene sentido, los elementos de la IU deben manejarse en el hilo principal.
Mi función MessageBox.ShowMessage (...) es una función estática que crea una instancia de mi cuadro de mensaje personalizado y lo muestra. ¿Hay algo que pueda poner en ShowMessage que fuerce la creación del cuadro de mensaje y se muestre en el hilo principal? En otra parte de mi código utilizo Control.BeginInvoke para manejar problemas similares, pero dado que es una función estática, no hay un elemento de interfaz de usuario ya existente para invocar a BeginInvoke.
¿Debo llamar a MessageBox.ShowMessage desde con Control.BeginInvoke? Prefiero que se llame a BeginInvoke (o a un equivalente) desde ShowMessage.
¿Tiene un enlace que explica cómo implementar la primera opción que enumera? – w4g3n3r
Llame a Thread.SetApartmentState() antes de iniciar el hilo. – itowlson
Al crear el hilo, simplemente llame a .SetApartmentState como se muestra en la respuesta (editada). Avíseme si necesita más ayuda para crear el hilo en primer lugar. –