我知道我需要在 WPF 的主 UI 线程上创建元素并将其添加到另一个元素,并且您可以在使用 Dispatcher 的另一个线程上轻松执行此操作。
但是,我想从 UI 线程构建我的元素,然后如果可能的话将它们全部添加到一批中。
这是因为我正在构建数千个元素,而它在 UI 线程上花费的几秒钟就冻结了整个应用程序。
有没有办法做到这一点?
我知道我需要在 WPF 的主 UI 线程上创建元素并将其添加到另一个元素,并且您可以在使用 Dispatcher 的另一个线程上轻松执行此操作。
但是,我想从 UI 线程构建我的元素,然后如果可能的话将它们全部添加到一批中。
这是因为我正在构建数千个元素,而它在 UI 线程上花费的几秒钟就冻结了整个应用程序。
有没有办法做到这一点?
我不这么认为;但是,您可以通过逐渐加载元素而不会使 GUI 完全挂起来创建更流畅的用户体验。这可以通过订阅CompositionTarget.Rendering
事件来完成,每次渲染帧时都会调用该事件。如果您维护需要添加的视图模型(和相应的控件类型)的列表,您可以创建其中的一些(例如,五十个)并将它们添加到事件处理程序中的可视化树中。下次调用该事件时,您再添加 50 个,依此类推。
我建议您使用一些复合应用程序模式,例如 Prims。请参阅使用 WPF 构建复合应用程序的模式。Prism 允许解耦您的应用程序组件,并根据需要加载它们。您还可以看到:棱镜 希望这会有所帮助......
有可能,您所做的是创建两个 UI 线程。在一个 UI 线程上,您构建窗口并在另一个 UI 线程上显示某种进度指示(进度条)。当你建立它时,让你的窗口可见。
http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/