powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поведение приложения во время закрытия
7 сообщений из 7, страница 1 из 1
Поведение приложения во время закрытия
    #39094852
Amateur284
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Нужно при закрытии приложения отобразить некоторую информацию, для чего использую метод
Код: c#
1.
void OnClosing(CancelEventArgs e)

, но в этом методе не получается взаимодействовать с содержимым окна.
Код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public partial class MainWindow : Window
{
    private Label appState;

    public MainWindow()
    {
        InitializeComponent();

        appState = new Label() {Content = "Running"};
        Content = appState;
    }

    protected override void OnClosing(CancelEventArgs e)
    {
        Title = "Closing";              // Изменение значения "Title" просходит
        appState.Content = "Closing";   // Изменение значения "appState" не происходит
        // MessageBox.Show("Closing");  // Но если раскоментировать эту строку то "appState" изменится
        Thread.Sleep(1000);

        base.OnClosing(e);
    }
}


Как можно отобразить сообщение в appState перед закрытием окна, и что я неправильно понимаю?
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39095013
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты меняешь, содержимое окна.
Далее окно тупо закрывается, потому что обновления интерфейса дело не дошло.
Если ставишь messagebox, то ты даешь возможность потоку интерфейса отрисовать твои изменения, пока ожидается ответ пользователя.
Если ставишь sleep - ты замораживаешь поток интерфейса, он не может отрисовать свои изменения

Нужно вызвать sleep в отдельном потоке и ждать его через await (ну или не sleep, а что там на самом деле требуется)
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39095017
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

через анимацию еще можно попробовать :)
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39095019
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например так

Код: c#
1.
2.
3.
4.
5.
6.
7.
    async protected override void OnClosing(CancelEventArgs e)
    {
        appState.Content = "Closing";
        await Task.Delay(1000);

        base.OnClosing(e);
    }
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39095022
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesчерез анимацию еще можно попробовать :)а будет анимация работать, если занять поток пользовательского интерфейса? И если да, то разве анимация (а точнее результаты выполнения шагов анимации) работают не в потоке интерфейса?
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39095863
Amateur284
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Спасибо за ответ. Буду разбираться.
...
Рейтинг: 0 / 0
Поведение приложения во время закрытия
    #39096087
Amateur284
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
спасибо за помощь. Я разобрался.
Вот так все работает как нужно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public partial class MainWindow : Window
{
    private Label _appState;
    private bool _doBeforeClose = true;

    public MainWindow()
    {
        InitializeComponent();

        _appState = new Label() {Content = "Running"};
        Content = _appState;
    }

    

    async protected override void OnClosing(CancelEventArgs e)
    {
        Title = "Closing";
        _appState.Content = "Closing";

        if (_doBeforeClose)
        {
            _doBeforeClose = false;
            e.Cancel = true;
            await Task.Delay(1000);
            Close();
        }
        base.OnClosing(e);
    }
}

...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поведение приложения во время закрытия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]