Как показать диалог состояния, когда родительская форма закрывается - PullRequest
3 голосов
/ 26 сентября 2011

У меня есть приложение WPF, для закрытия которого требуется некоторое время, поэтому я хочу добавить диалоговое окно «Пожалуйста, подождите», которое будет отображаться во время закрытия основной формы.Однако, когда я добавил «formmessage.show» в обработчик события закрытия моей основной формы, форма отображается, но вместо текста «пожалуйста, подождите» все, что я получаю, это белый прямоугольник.Кажется, что это происходит только при вызове этого кода из обработчика закрытия.Он отлично работает с другими обработчиками (щелчок формы или развернуть).Кто-нибудь может помочь?Вот мой упрощенный код:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Form1 f = new Form1();
        f.Show();
        System.Threading.Thread.Sleep(3000);
    }
}

На Form1 есть ярлык с надписью «пожалуйста, подождите».

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Попробуйте:

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    new Action(() =>
                {
                    Form1 f = new Form1();
                    f.Show();
                    System.Threading.Thread.Sleep(3000);
                }));

Кстати, вы можете удалить Thread.Sleep(), поскольку значение по умолчанию Режим завершения работы приложения равно OnLastWindowClose , поэтому приложение будет активным до тех пор, пока пользователь не закроет активное окно, это может быть изменено переключением Application.ShutdownMode на OnMainWindowClose в файле App.xaml)

1 голос
/ 26 сентября 2011

Это может быть связано с тем, что вы создаете форму в том же потоке, когда говорите о том, что спите, во время которого она не собирается отвечать на запросы рисования, попробуйте запустить форму в другом потоке и закрыть ее в деструкторе MainWindow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...