Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Поведение приложения во время закрытия / 7 сообщений из 7, страница 1 из 1
05.11.2015, 08:29
    #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
05.11.2015, 11:03
    #39095013
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение приложения во время закрытия
ты меняешь, содержимое окна.
Далее окно тупо закрывается, потому что обновления интерфейса дело не дошло.
Если ставишь messagebox, то ты даешь возможность потоку интерфейса отрисовать твои изменения, пока ожидается ответ пользователя.
Если ставишь sleep - ты замораживаешь поток интерфейса, он не может отрисовать свои изменения

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

через анимацию еще можно попробовать :)
...
Рейтинг: 0 / 0
05.11.2015, 11:08
    #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
05.11.2015, 11:10
    #39095022
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение приложения во время закрытия
Roman Mejtesчерез анимацию еще можно попробовать :)а будет анимация работать, если занять поток пользовательского интерфейса? И если да, то разве анимация (а точнее результаты выполнения шагов анимации) работают не в потоке интерфейса?
...
Рейтинг: 0 / 0
05.11.2015, 19:49
    #39095863
Amateur284
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поведение приложения во время закрытия
Shocker.Pro,

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


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