Как принудительно управлять перерисовкой содержимого в обработчике событий - PullRequest
1 голос
/ 03 апреля 2012

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

private delegate void InlineDelegate();
private void btnLogon_Click(object sender, RoutedEventArgs e)
{
    lblInvalidLogon.Dispatcher.Invoke(new InlineDelegate(() =>
    {
        lblInvalidLogon.Content = string.Empty;
        lblInvalidLogon.InvalidateVisual();
    }), System.Windows.Threading.DispatcherPriority.Render, null);
    //
    // Process to verify logon credentials...
    //
}

Я также пробовал DispatcherPriority.Send, и я поместил Thread.Sleep после Invoke, чтобы дать ему многовремя для обновления пользовательского интерфейса, но ничего из того, что я пробовал, не заставит пользовательский интерфейс обновляться, пока процесс аутентификации продолжается.

1 Ответ

1 голос
/ 03 апреля 2012

Фил правильно указал причину:

Вам необходимо переместить проверку входа в другой поток, он блокирует поток пользовательского интерфейса.

Работал над этим и придумал решение прямо в то же время, что и его комментарий. Я решил это, как показано ниже:

private delegate void InlineDelegate();
private void btnLogon_Click(object sender, RoutedEventArgs e)
{
    lblInvalidLogon.Content = string.Empty;
    lblInvalidLogon.Dispatcher.Invoke(new InlineDelegate(() =>
    {
        //
        // Process to verify logon credentials...
        //
    }), System.Windows.Threading.DispatcherPriority.Background, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...