向用户显示时填充文本框

本文关键字:文本 填充 用户 显示 | 更新日期: 2023-09-27 18:20:51

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

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

有没有一种方法可以在向用户显示文本框时加载文本框的内容?它们都在ScrollView中,但在任何时候都只能看到其中的一小部分。

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

向用户显示时填充文本框

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

如果要在TextBox控件中增量显示加载的信息,则可能值得在单独的线程或BackgroundWorker上运行加载过程(教程)。这样,当您完成为TextBox加载一些信息时,您可以回调到Dispatcher线程并更新TextBox。然后,当您在后台继续费力的加载过程时,WPF将有机会呈现信息(这也有助于获得更好的用户体验,而不是获得冻结应用程序的外观)。

尝试使用后台工作程序,这样一来,后台文件中的文本框就会不断填满,用户界面也会保持响应。

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
    //Fill Textboxes
};

worker.RunWorkerAsync("XMLPATH");