Почему пропадают созданные методом кнопки? C# Windows Forms

Есть модуль который создаёт таблицу с кнопками, если запустить его отдельно (без каких-либо последующих функций) - всё работает, кнопки появляются и нажимаются, но стоит только запустить следующий метод (который должен брать случайную кнопку из таблицы и красить её на пару секунд в красный), как программа перестаёт выводить кнопки на форму. Она не висит, цикл во втором модуле крутится, но почему-то кнопки с первого метода не появляются, в чём дело?

Заранее спасибо

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace WinFormsApp3
{
    public partial class Form1 : Form
    {
        int I, J;
        List<Button> buttons = new List<Button>();
        bool progress = false;
        public Form1()
        {
            InitializeComponent();
        }
        private void MakeButtons(int i, int j)
        {
            List<Button> buttons = new List<Button>();
            for (int k = 0; k < i; k++)
            {
                for (int h = 0; h < j; h++)
                {
                    Button button = new Button
                    {
                        Location = new Point(30 + k * 30, 60 + h * 30),
                        Size = new Size(25, 25),
                        Visible = true,
                        //BackColor = Color.Red
                    };
                    
                    buttons.Add(button);
                    this.Controls.Add(button);
                    
                }
            }
            this.buttons = buttons;
        }
        private void SetTarget()
        {
            Random random = new Random();
            while (!progress)
            {
                int choosenIndex = random.Next(buttons.Count);
                Color def = buttons[choosenIndex].BackColor;//запоминаем цвет
                buttons[choosenIndex].BackColor = Color.Red;
                buttons[choosenIndex].Visible = true;
                Thread.Sleep(2000);
                buttons[choosenIndex].BackColor = def; //возвращаем его через 2 секунды
            }

        }
        private void buttonStart_Click(object sender, EventArgs e)
        {
            int.TryParse(textBoxLines.Text, out I);
            int.TryParse(textBoxColumns.Text, out J);
            MakeButtons(I,J);
            //SetTarget();
        }
    }
}

Вот так оно выглядит без использования SetTarget


Ответы (1 шт):

Автор решения: Pekor

Только что проверил твой код, сначала проверил без цикла - все работает, потом проверил цикл с 3 итерациями, вот код:

private void SetTarget()
        {
            Random random = new Random();
            int a = 0;
            while (a<3)
            {
                int choosenIndex = random.Next(buttons.Count);
                Color def = buttons[choosenIndex].BackColor;//запоминаем цвет
                buttons[choosenIndex].BackColor = Color.Red;
                buttons[choosenIndex].Visible = true;
                Thread.Sleep(2000);
                buttons[choosenIndex].BackColor = def; //возвращаем его через 2 секунды
                a++;
            }

        }

также выводит кнопки и метод отрабатывает (правда вроде как не совсем так, как должен). Я не силен в асинхронном программировании, но точно можно сказать, что проблема в бесконечном цикле, попробуй сделать условие выхода из цикла и поработать над кодом внутри цикла.

→ Ссылка