2013-10-29 20 views
1

我正在学习使用C#Win窗体中的多线程,并根据来源最好的方法来实现这是通过调用工作线程的主要方法。动态添加大量的控件形成另一个线程

现在这一切都很好,当必须完成繁重的处理,然后更新图形用户界面。

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

有没有办法解决这个问题?或者我应该尝试使用其他控件,而不需要我同时实例化很多控件(因为这显然有点重)。

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

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

在此先感谢。

+2

我强烈建议所有.Net Windows应用程序开发的WPF而不是winforms。这是[更快](http://www.youtube.com/watch?v=D3Y6DnFpHCA)来处理大型列表,因为它具有内置UI虚拟化,硬件加速和基于矢量的图形。 winforms是一项非常古老的技术,不再关心任何人,不推荐用于任何新项目,只是为了维护传统应用程序。 –

+1

顺便说一句,如果你来自网页背景,那么XAML + DataBinding方法对于你来说会比可怕的程序化太多代码为任何形式的winforms方法感觉更自然。 winforms不支持任何类型的自定义,并且在需要大量UI元素的情况下它执行得非常糟糕。 –

+0

不,没有什么像winforms中的'div'。 winforms实际上是GDI +的一个包装,它是一种恐龙技术。它没有被设计用于定制/现代/丰富的用户界面开发,仅用于Windows 3.1类似的东西。你应该真的在使用WPF。 –

回答

0

你不应该有一个很好的理由来添加数百个控件,更不用说数千个了。这听起来像你需要一个自定义控件,你需要添加项目。

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

这是使用WPF而不是Winforms的优点,因为您可以轻松使用现有的ListBox逻辑并具有自由范围来自定义外观的项目,甚至他们如何安排。

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