如何在事件处理程序中强制控制内容重绘

时间:2012-04-03 18:44:32

标签: c# wpf

这项任务应该很简单,但我尝试的任何工作都没有。我只是想在单击按钮时,以及在加载和验证数据时让文本消失。

我尝试过以下操作,但不强制重绘:

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,并且我在Invoke之后放置了一个Thread.Sleep来给它足够的时间来更新UI,但我尝试过的任何内容都不会强制UI在身份验证过程继续时更新。

1 个答案:

答案 0 :(得分:1)

菲尔正确地指出了原因:

  

您需要将登录验证移动到另一个线程,它阻止了UI线程。

正在努力解决这个问题,并在他发表评论的同时提出解决方案。我已经解决了以下问题:

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);
}