在文本块WP7上显示动画文本

时间:2011-11-14 01:13:39

标签: c# silverlight windows-phone-7

我希望我的应用程序能够逐字地将文本显示为文本块,而不是整个文本。

我尝试执行以下操作:

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

问题是等待整个时间过去,然后它会显示整个文本一次。

我认为有一个自动缓冲区可以防止这样做。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您需要安排在Dispatcher线程上执行UI更新,您注意到的当前更新将作为一个块同步执行,这将冻结UI,直到您的更新完全完成。相反,您可以使用DispatcherTimer逐个字母地异步更新UI,即借助扩展方法:

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

DelayInvoke()Dispatcher的扩展方法:

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