1

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

现在,当必须进行繁重的处理并更新 GUI 时,这一切都很好。

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

有没有办法解决?或者我应该尝试使用其他一些不需要我同时实例化许多控件的控件(因为这显然有点重)。

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

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

提前致谢。

4

1 回答 1

0

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

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

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

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

于 2013-10-29T17:00:35.283 回答