2011-01-07 26 views
3

我想流一堆文本来显示长时间运行的任务(例如Visual Studio中的输出窗口)的状态/进度。如何高效地将文本流式传输到WPF中的屏幕?

目前我有这样的XAML:

<ScrollViewer Canvas.Left="12" Canvas.Top="12" Height="129" Name="scrollViewer1" Width="678"> 
     <TextBlock Name="text" TextWrapping="Wrap"></TextBlock> 
    </ScrollViewer> 

,这后面的代码:

private void Update(string content) 
    { 
     text.Text += content + "\n"; 
     scrollViewer1.ScrollToBottom(); 
    } 

一段时间后,它变得非常缓慢。
是否有推荐的方法来做这种事情?我是否使用了正确的控件?

谢谢!

+0

你是什么意思真的很慢?慢滚动?导航时整个应用程序变得缓慢? – 2011-01-07 17:02:01

回答

4

您至少需要使用只读TextBox并使用AppendText()方法来附加文本。

当然,如果您有足够的文本量,您仍然无法解决性能问题。既然如此,你可能需要研究虚拟化(数据和UI)解决方案。

+2

我对TextBox的选择感到惊讶。想要测试他们的表现和测试完全反映了你的观点,肯特。将100K字添加到TextBlock需要91625毫秒,而对于文本框它只有10737毫秒。 – Anvaka 2011-01-07 18:20:25

相关问题