FlowLayoutPanel缓慢加载UserControls

时间:2017-05-15 08:10:56

标签: c# winforms user-controls flowlayoutpanel

我有FlowLayoutPanel加载了我创建的一堆用户控件。

这是usercontrol(我们将其命名为ColorBox),它只是一个带有标签的图像(加载在Panel上)。

enter image description here

我将这些加载到FlowLayouPanel中,这是最终结果: enter image description here

我的问题是当有很多ColorBox(300-400)时加载非常慢。 到目前为止,我正在调用在单独的线程中加载项目的函数,因此UI仍然可以正常运行。

这是我用来加载的功能,我描述了我的应用程序,这是需要花费大量时间的那个:

    private void LoadColorBox(List<ColorBox> cBoxList)
    {
        flowLayoutPanel1.SuspendLayout();
        foreach (var cBox in cBoxList)
            flowLayoutPanel1.Controls.Add(cBox);
        flowLayoutPanel1.ResumeLayout();
    }

需要花费大量时间的另一个函数是ColorBox对象的构造函数,尤其是我检查我使用的Image是否存在然后将其放在我的面板上。

      Image img;
      using (var bmpTemp = new Bitmap(imgPath))
      {
            img = new Bitmap(bmpTemp);
      }

      panelColor.BackgroundImage = img;
      panelColor.BackgroundImageLayout = ImageLayout.Stretch;

我可以做些什么来改善表现?

1 个答案:

答案 0 :(得分:0)

您应该使用AddRange()而不是循环Add()。

private void LoadColorBox(List<ColorBox> cBoxList)
    {
        flowLayoutPanel1.Controls.AddRange(cBoxList)
    }

我不知道你何时处理这个问题,但如果你在表单的构造函数中执行此类操作而不是Load(或其他一些)事件,那么你也可以获得一些时间。