Como msdn estados:
private void NewWindowHandler(object sender, RoutedEventArgs e)
{
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}
private void ThreadStartingPoint()
{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
EDIT: esta es una respuesta de edad, pero ya que parece ser visitado a menudo, también podría pensar en las siguientes modificaciones/mejoras (no probado).
Si desea cerrar una ventana de este tipo, simplemente mantener una referencia al objeto de ventana desde el exterior de la rosca (delegado), y luego invocar estrecha en él, algo como esto:
void CloseWindowSafe(Window w)
{
if (w.Dispatcher.CheckAccess())
w.Close();
else
w.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(w.Close));
}
// ...
CloseWindowSafe(tempWindow);
Si el nuevo hilo podría llegar a ser terminado (abortada por la fuerza), en línea con la pregunta en los comentarios:
private void ThreadStartingPoint()
{
try{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
catch(ThreadAbortException)
{
tempWindow.Close();
System.Windows.Threading.Dispatcher.InvokeShutdown();
}
//the CLR will "rethrow" thread abort exception automatically
}
AVISO: no hacer esto en casa, abortando hilos es (casi siempre) con las mejores prácticas. Los hilos deben manejarse con gracia mediante cualquiera de las diversas técnicas de sincronización, o en este caso, simplemente a través de un invocado window.Close()
Gran ¿Cómo puedo cerrar una ventana creada de esta manera –
Sé que es una vieja pregunta, pero este enfoque todavía funciona. Tengo solo un problema - lo uso para cargar la ventana, así que - mostrar la ventana de carga en un nuevo hilo -> hacer cosas -> newThread.Abort() y está bien, pero si lo vuelvo a hacer, se bloquea toda la aplicación. porque va a ejecutar el despachador de nuevo. ¿Cómo resolverlo? – MajkeloDev
Hola, estaba luchando con esto también. Para mí, este [enlace] (https://dontpaniclabs.com/blog/post/2013/11/14/dynamic -splash-screens-in-wpf /) funcionado. Esto usa el ManualResetEvent-way. Hay una fuente para descargar y compruebe también (GitHub) – dba