我有一个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>
答案 0 :(得分:0)
这里要注意的一点是,您要按顺序加载信息。因此,UI没有时间在TextBox
的每次加载之间呈现。因此,一旦顺序过程完成,所有的TextBox
控件都会显示加载的信息。
如果要逐步在TextBox
控件中显示加载的信息,可能需要在单独的线程或BackgroundWorker
(tutorial)上运行加载过程。这样,当您完成为TextBox
加载某些信息时,您可以回拨Dispatcher
个帖子并更新TextBox
。然后,当您在后台继续繁重的加载过程时,WPF将有机会呈现信息(它还可以提供更好的用户体验,而不是获得冻结应用程序的外观)。
答案 1 :(得分:0)
尝试使用后台工作程序,这样文本框将在后台继续填充,并且ui将保持响应。
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
//Fill Textboxes
};
worker.RunWorkerAsync("XMLPATH");