在不阻塞GUI线程的情况下向WPF窗口添加控件

本文关键字:WPF 窗口 添加 控件 情况下 GUI 线程 | 更新日期: 2023-09-27 18:09:23

我正试图找到一种方法来添加多个(100+高数据量)控件到WPF GUI,而不阻塞GUI线程本身。这就是我当前创建控件的方式:

我在并行线程中异步创建控件,我可以将它们添加到GUI中,但当涉及到container.Children.Add()时,GUI被阻塞了。

我的第一次尝试是通过异步方法中的任务创建它们。

var a = Task.Factory.StartNew(() =>
{
    foreach (UserElement element in userElements)
        this.Dispatcher.Invoke(() => { UserElementsContainer.Children.Add(element); });
});
await a; //Won't work with or without await.

还有别的办法吗?

在不阻塞GUI线程的情况下向WPF窗口添加控件

你应该在需要显示控件时使用虚拟化和加载控件——这样你就减少了加载控件所需的时间,因为你一次只显示几个控件。

查看这个示例,它演示了一个虚拟的Canvas控件。Microsoft虚拟WPF Canvas

还有另一篇关于更多虚拟化技术参考的文章:WPF中UI虚拟化的资源和指南