Отключить wpf winow при нажатии кнопки - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю с wpf (MVVM).Я вижу некоторое программное обеспечение, которое отключает все окно и контролирует, когда кнопка нажата, и она не завершилась.

Например, если это код команды кнопки:

Thread.Sleep(20000);

в течение этого 20000 все окно отключено.(или любая другая трудоемкая функция)

Это хороший способ?если да, как я могу это сделать?Я знаю о свойстве IsEnabled, но код программного обеспечения, который я видел, не содержит его, поэтому, я думаю, должен быть более общий способ или настройка.

1 Ответ

0 голосов
/ 19 февраля 2019

Это хороший способ?

Нет.Вы никогда не должны блокировать поток пользовательского интерфейса на несколько секунд.Это недружелюбный пользователь и плохая практика.

Вы должны выполнить любой потенциально длительный метод в фоновом потоке.Самый простой способ сделать это - запустить задачу и ждать ее.Вы можете, конечно, отключить все окно в течение времени, которое требуется для завершения задачи, если вы хотите, например:

private async Task SomeLongRunningMethod()
{
    IsEnabled = false;
    await Task.Run(() => Thread.Sleep(20000));
    IsEnabled = true;
}

Либо установите свойство IsEnabled самого окна, либо установите свойство источникамодели представления, если вы принимаете шаблон проектирования MVVM.В любом случае, вы не должны блокировать поток пользовательского интерфейса.

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