2011-11-14 8 views
1

テキストをテキストではなく文字でテキストで表示するようにしたい。テキストブロックにテキスト表示をアニメーション化WP12

私は、次の操作を実行しようとした:

 textBlock1.Text=""; 
     for (int i = 0; i < s.Length; i++) 
     { 
      DateTime t = DateTime.Now; 
      textBlock1.Text += s[i].ToString(); 
      while (DateTime.Now < t.Add(new TimeSpan(0, 0, 0, 0, 500))) ; 
     } 

問題は、全体の時間が通過することが待っている、それは一度全体のテキストが表示されます。

私はそこに自動化されたバッファーがあると思います。

どうすれば解決できますか?

答えて

2

ディスパッチャスレッドで実行するようにUIアップデートをスケジュールする必要があります。現在のアップデートは、更新が完全に完了するまでUIをフリーズするブロックとして同期的に実行されます。 Dispatcherのために拡張メソッドであることDelayInvoke()

for (int i = 1; i <= s.Length; i++) 
{ 
    string partialText = s.Substring(0, i); 
    Dispatcher.DelayInvoke(TimeSpan.FromMilliseconds(500*i), 
          new Action(() => 
          { 
           textBlock1.Text = partialText; 
          })); 
} 

:代わりに、すなわち拡張メソッドの助けを借りて、UIに手紙によって非同期に手紙を更新するためにDispatcherTimerを使用することができます

public static class DispatcherHelper 
{ 
    public static void DelayInvoke(this Dispatcher dispatcher, TimeSpan ts, Action action) 
    { 
     DispatcherTimer delayTimer = new DispatcherTimer(); 
     delayTimer.Interval = ts; 
     delayTimer.Tick += (s, e) => 
     { 
      delayTimer.Stop(); 
      action(); 
     }; 
     delayTimer.Start(); 
    } 
} 
+0

たDispatcherPriority列挙型ではありませんWP7でサポートされています – SKandeel

+0

私はそうしました、DispatcherTimer delayTimer = new DispatcherTimer(); – SKandeel

+1

@SherifMaherEaid:固定コンストラクタコール – BrokenGlass

関連する問題