2010-02-09 8 views
5

Necesito crear un formulario en un hilo diferente y mantenerlo en funcionamiento hasta que el usuario realice alguna acción en el hilo principal (haga clic en un botón).Método wpf para iniciar el bucle de mensaje de la aplicación

No es muy difícil de hacer uso de

System.Windows.Forms.Application.Run(new ApplicationContext()); 

que se inicia un mensaje de solicitud de bucle en el hilo actual. Pero esta solución requiere el uso del espacio de nombres System.Windows.Forms, que no es un espacio de nombres wpf.

¿Conoces un wpf-way para lograr este objetivo? =)

P.S. sin iniciar un bucle de mensaje de aplicación, el hilo terminará inmediatamente después del procesamiento de la última expresión en él. Entonces, el Formulario aparecerá solo por un momento y se cerrará. ? = (

Respuesta

4

Uso System.Windows.Threading.Dispatcher.Run()

-1

ayuda esto a

Application.DoEvents in WPF Revisited

extracto de código en el blog:

using System; 
using System.Threading; 
using System.Windows; 
using System.Windows.Threading; 

namespace Sheva.Windows 
{ 
    /// <summary> 
    /// Designates a Windows Presentation Foundation application with added functionalities. 
    /// </summary> 
    public class WpfApplication : Application 
    { 
     /// <summary> 
     /// Processes all messages currently in the message queue. 
     /// </summary> 
     /// <remarks> 
     /// This method can potentially cause code re-entrancy problem, so use it with great care. 
     /// </remarks> 
     public static void DoEvents() 
     { 
      Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { })); 
     } 
    } 
} 
+0

No, no = ( – user101375

4

Y, También hay Dispatcher.PushFrame

Esto es útil porque e le permite ejecutar el bucle de mensajes hasta un criterio de detención que defina, por ejemplo, mientras se muestra un diálogo de progreso en la pantalla.

+0

Método muy interesante. ¿Tiene algún ejemplo de usarlo? – user101375

+0

No tengo nada útil, lo usé en mi empresa anterior. Creo que generalmente creé el DispatcherFrame, luego cree la ventana de diálogo, bríndele una referencia al objeto DispatcherFrame y luego llame a PushFrame. Cuando se completa el procesamiento, o el usuario cancela, establece la propiedad Continue del DispatcherFrame en false. En el código del hilo, primero señalo el Hilo de fondo para cancelar y esperar a que indique el hilo de la interfaz de usuario que efectivamente está cancelado, y continúe = falso en ese evento. –

+0

'Dispatcher.Run' simplemente llama a' Dispatcher.PushFrame (nuevo DispatcherFrame()); '. Entonces es lo mismo – NtFreX

Cuestiones relacionadas