2012-04-03 66 views
1

這個任務應該很簡單,但我沒有試過任何工作。我只是試圖讓按鈕被點擊時,文本消失,而數據加載和驗證。

我試過以下,它不強制重繪:如何在事件處理程序中強制控制內容重繪

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繼調用給它足夠的時間來更新用戶界面,但我沒有嘗試過會強制用戶界面在認證過程繼續時更新。

+1

您需要將登錄驗證移動到另一個線程,它阻止了UI線程。 – Phil 2012-04-03 18:46:12

+0

@Phil Yup,當我在發佈問題後回到項目中時,它顯然讓我的大腦時間到了無霧,而我意識到這正是問題所在。 – 2012-04-03 18:55:45

回答

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); 
} 
相關問題