动态添加大量控件会形成另一个线程

本文关键字:另一个 线程 控件 添加 动态 | 更新日期: 2023-09-27 18:37:15

我正在使用 C# 在 Win Forms 中学习多线程,根据消息来源,实现这一目标的最佳方法是从工作线程调用 main 方法。

现在,当必须进行繁重的处理然后更新GUI时,这一切都可以正常工作。

但是,我有一个场景,我需要以编程方式在面板中添加大量控件。这可能会达到数千(面板将可滚动)。因此,由于控件最终是由主线程添加的,因此程序仍然挂起,直到完成此操作。

有什么办法吗?或者我应该尝试使用其他一些不需要我同时实例化大量控件的控件(因为这显然有点重)。

基本上,此面板包含一个列表和一个图标(取决于状态)。因此,我正在为每个条目创建一个标签,我不知道它是否是理想的方式。

顺便说一下,我来自Web应用程序开发部门...在 .NET 中是否有类似于div 的控件?我查看了一个富文本框,但它似乎不允许您以直接的方式添加图像。

提前谢谢。

动态添加大量控件会形成另一个线程

您不应该有充分的理由添加数百个控件,更不用说数千个控件了。 听起来您需要一个自定义控件,并且需要向其添加项。

ListBox 或 ListView 控件适用于基本项,但如果你想要大量的可自定义性,则必须自己重新发明轮子并手动绘制所有内容。 如果您需要处理多选、滚动、键盘快捷键等,则需要做很多工作。

这就是使用 WPF 而不是 Winforms 的优势,因为您可以轻松地使用现有的 ListBox 逻辑,并且可以自由地自定义项的外观,甚至自定义它们的排列方式。

WPF 具有虚拟化面板的概念,即使包含数千个项目,该面板也可以很好地执行,因为它在滚动到项目之前不会创建 UI 对象。