2012-04-03 22 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を配置しましたUIを更新しますが、試したことはありませんが、認証プロセスが続行されている間にUIを強制的に更新します。

+1

ログオン検証を別のスレッドに移動する必要があります。これはUIスレッドをブロックしています。 – Phil

+0

@Phil Yup、質問を投稿してプロジェクトに戻ったとき、それは明らかに私の脳の時間をかけて霧を止めるようになりました。 –

答えて

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); 
} 
関連する問題