将文本添加到TextBlock中,一次添加一个字符

时间:2016-09-23 00:56:19

标签: c# wpf multithreading dispatcher textblock

我发布此信息,以便任何人都可以使用该代码。

根据Noctis的建议略微减少代码。

StringBuilder DescriptionText = new StringBuilder();

async void RunDescription(StringBuilder description)
{
    DescriptionText = description;

    await Task.Delay(1000);  // Short delay before the text starts printing so the window has time to load

    new Thread(AddTextToTextBlock).Start();
}

void TextBlockDispatcher(string text)
{
    TextBlock1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => TextBlock1.Inlines.Add(text)));
}

void AddTextToTextBlock()
{
    foreach (char c in DescriptionText.ToString())
    {
        Thread.Sleep(30);
        TextBlockDispatcher(c.ToString());
    }
}

1 个答案:

答案 0 :(得分:2)

听起来像你需要跳过的平常箍。我可能考虑改变的唯一方法是调用调度程序,然后检查它是否具有访问权限,只需直接在您的对象上调用它即可。 看起来应该有点像:

TextBlock1.Dispatcher.BeginInvoke((Action)(() => /* logic here */ )

为您保存一个电话,但确实如此。 你需要按摩它,因为它来自我的头顶,但它应该指向正确的方向。