Я вижу, что вы используете панель FlowLayout
. Я подозреваю, что каждый раз, когда вы добавляете дочерний элемент управления, переделывается весь макет, что также может занять много времени.
Можете ли вы попытаться заключить весь цикл следующим образом:
flowLayoutPanel1.SuspendLayout();
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
flowLayoutPanel1.ResumeLayout();
Вы даже можете попытаться добиться еще лучших результатов, отключив рисование, используя ответы здесь .