Tag: parallel processing

并行生成UI

我们有一个WPF应用程序,它有一个带有缓存的VirtualizingStackPanel的ListBox。 不是因为它有大量的元素(在极端情况下通常小于20但可能高达100或更多),但因为元素需要时间来生成。 这些元素实际上是UIElement对象。 因此应用程序动态地需要生成UIElements。 问题在于,即使虚拟化似乎有效,但应用程序仍然很难做出响应,这是一个概念validation解决方案,具有最小的“噪音”。 所以我们认为,由于主要问题是我们动态生成复杂的UIElement对象,我们需要并行执行,即离线。 但是我们得到一个代码需要在STA线程上运行的错误: 调用线程必须是STA,因为许多UI组件都需要这个。 这是否意味着我们无法在WPF主UI线程以外的线程上生成UI(UIElement对象)? 这是我们的概念validation解决方案中的相关代码片段: public class Person : ObservableBase { // … UIElement _UI; public UIElement UI { get { if (_UI == null) { ParallelGenerateUI(); } return _UI; } } private void ParallelGenerateUI() { var scheduler = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew(() => GenerateUI()) .ContinueWith(t => { _UI = t.Result; RaisePropertyChanged(“UI”); […]