es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lanzando una ventana WPF desde una aplicación de consola

Estoy tratando de usar una ventana WPF como un mensaje emergente que se cerrará una vez que se haya realizado una tarea. Toda la documentación que he visto dice que esto no se puede hacer con un MessageBox, por eso estoy usando WPF. Encontré un código que me permitió abrir la ventana WPF pero no avanzaría la aplicación al siguiente proceso. A continuación se muestra el último ejemplo de código que encontré que pensé que mostraba promesa pero la ventana no se está abriendo:

[STAThread]
static void Main(string[] args)
{
    try
    {
        string filePath = "mi nuevo directorio";
        var popup = new PopupTest();

        popup.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() =>
        {
            popup.Show();
        }));

        // Hacer algunas cosas de la aplicación de consola

        do
        {
            Directory.CreateDirectory(filePath);
        } while (!Directory.Exists(filePath));

        popup.Close();            
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.WriteLine(e.StackTrace);
    }
}

El archivo cs.xaml es simplemente el predeterminado:

/// <summary>
/// Lógica de interacción para PopupTest.xaml
/// </summary>
public partial class PopupTest : Window
{
    public PopupTest()
    {
        InitializeComponent();
    }
}

Siento que esto debería ser más simple de lo que estoy haciendo. Cualquier cosa que pueda indicarme en la dirección correcta es apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la ventana WPF no se está abriendo porque la aplicación de consola no está esperando a que se muestre antes de continuar con la siguiente tarea. Puedes intentar usar el método ShowDialog() en lugar de Show() para hacer que la ventana WPF sea modal y bloquear la aplicación de consola hasta que se cierre.

    popup.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() =>
    {
        popup.ShowDialog();
    }));
    

    Esto debería mostrar la ventana WPF y bloquear la aplicación de consola hasta que el usuario cierre la ventana. Una vez que la ventana se cierre, la aplicación de consola continuará con la siguiente tarea, que en este caso es crear el directorio y comprobar si existe.

    ¡Espero que esto te ayude!

Comments are closed.