C# 向用户显示时填充文本框

C# 向用户显示时填充文本框,c#,wpf,C#,Wpf,我有一个WPF页面,上面有很多文本框,所有这些文本框都必须从xml数据加载(这需要花费一些时间) 当文本框显示给用户时,是否有方法加载文本框的内容? 它们都在滚动视图中,但在任何时候都只能看到其中的一小部分 请注意:我尝试在已加载事件和文本框的OnRender事件中进行加载,但在这两种情况下,页面上的所有项目都调用了该方法,而不仅仅是可见的项目。这里需要注意的一点是,您正在按顺序加载信息。因此,在每次加载TextBox之间,UI没有时间进行渲染。因此,一旦顺序过程完成,所有文本框控件都会显示加载

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

当文本框显示给用户时,是否有方法加载文本框的内容? 它们都在滚动视图中,但在任何时候都只能看到其中的一小部分


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

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


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

尝试使用后台工作者,这样一来,文本框将在后台不断填充,用户界面将保持响应速度

BackgroundWorker worker = new BackgroundWorker();

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

{

    //Fill Textboxes

};



worker.RunWorkerAsync("XMLPATH");

但是问题是tRange.Load,这必须在Gui线程中完成,因为它会更新文本框,所以我不知道在Backgroundworker中可以做什么。还是我遗漏了什么?@RobotMess我明白你的问题了。在这种情况下,它都在
TextRange
类中内部化。在这种情况下,可能值得研究使用WPF绑定与
BackgroundWorker
并自己控制加载过程BackgroundWorker@RobotMess查看我在帖子中为
BackgroundWorker
提供的两个链接。如果你通读了这些链接,你应该对我的建议有足够的了解,从而决定我的建议是否是一个可行的解决方案。如果您对概念或实现的理解有困难,请告诉我。虽然有点晚了,但我研究了一下,让BackgroundWorker使用它的唯一方法是使用另一个GUI线程。唯一的问题是对象不能简单地从一个GUI线程传递到另一个GUI线程,我必须序列化已处理的项目并在第一个GUI线程中重新加载它们。这是一个很大的工作,性能的好处是最小的。问题是tRange.Load这必须在Gui线程中完成,因为它更新了文本框。
BackgroundWorker worker = new BackgroundWorker();

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

{

    //Fill Textboxes

};



worker.RunWorkerAsync("XMLPATH");