显示给用户时填充文本框

时间:2012-01-19 11:09:40

标签: c# wpf

我有一个WPF页面,上面有很多文本框,所有这些都必须从xml数据加载(这需要一点时间)。

var tRange = new TextRange(tbox.Document.ContentStart, tbox.Document.ContentEnd); 
using (var stream = new MemoryStream(value))
{
    tRange.Load(stream, DataFormats.Xaml); 
}

有没有办法加载texbox的内容,因为它们会显示给用户? 它们都在ScrollView中,但其中只有少数随时可见。

作为注释:我尝试在Loaded事件和文本框的OnRender事件中进行加载,但在这两种情况下都调用了页面上所有项目的方法,而不仅仅是可见的项目。 / p>

2 个答案:

答案 0 :(得分:0)

这里要注意的一点是,您要按顺序加载信息。因此,UI没有时间在TextBox的每次加载之间呈现。因此,一旦顺序过程完成,所有TextBox控件都会显示加载的信息。

如果要逐步在TextBox控件中显示加载的信息,可能需要在单独的线程或BackgroundWorkertutorial)上运行加载过程。这样,当您完成为TextBox加载某些信息时,您可以回拨Dispatcher个帖子并更新TextBox。然后,当您在后台继续繁重的加载过程时,WPF将有机会呈现信息(它还可以提供更好的用户体验,而不是获得冻结应用程序的外观)。

答案 1 :(得分:0)

尝试使用后台工作程序,这样文本框将在后台继续填充,并且ui将保持响应。

BackgroundWorker worker = new BackgroundWorker();

worker.DoWork += delegate(object s, DoWorkEventArgs args)

{

    //Fill Textboxes

};



worker.RunWorkerAsync("XMLPATH");