_Q12_ Ответов: 1

Как сделать больше объектов нулевыми


У меня есть 3 кнопки. Каждый раз, когда я нажимаю на любую из них, форма мерцает и застывает. Чем больше раз я нажимаю на кнопки, тем дольше длится Замороженное время. Я поискал в интернете и нашел, что контролирует.Clear(); - это очистка от массива элементов управления, но не от памяти. Я попытался очистить память, но понял, что понятия не имею, как это сделать. Я попробовал это сделать и получил 2 ошибки для 2 версий цикла.
        private void button01_Click(object sender, EventArgs e)
        {
            Controls.Clear();            InitializeButtons();
            // ClearALLControls();
        } 

        private void button02_Click(object sender, EventArgs e)
        {
            Controls.Clear();            InitializeButtons();
        }

        private void button03_Click(object sender, EventArgs e)
        {
            Controls.Clear();            InitializeButtons();
        }


        void ClearALLControls() //this method not working - got 2 errors
        {
            foreach (Control item in this.Controls)
            {
                item = null; //error@ [item]
//Cannot assign to 'item' because it is a 'foreach iteration variable'	

            }
//so... it's a foreach problem? i try it with for loop then

            for (int i = 0; i < Controls.Count; i++)
            {
                Controls[i] = null; //error@ [Controls[i]]
//System.Windows.Forms.Control.ControlCollection.this[int]' cannot be assigned to -- it is read only	
            }
        }


Что я уже пробовал:

......................................

1 Ответов

Рейтинг:
11

OriginalGriff

На первый взгляд, это ваши InitializeButtons, которые наносят ущерб.
Я подозреваю, что вы добавляете обработчики щелчков к существующим кнопкам и возвращаете их в коллекцию элементов управления.
А обработчики-это цепные делегаты: добавление одного и того же обработчика дважды означает, что он вызывается дважды, затем трижды четыре раза, пять раз ... так что время, необходимое обработчику для выполнения, увеличивается каждый раз, когда он нажимается.

То, что вы показываете там, не показывает этот бит - вот почему это предположение, - но код, который вы показываете, это ... гм ... довольно странный. Похоже, вы не знаете, что делаете, и кодируете по принципу "хит и надежда", а не тщательно продумываете его, потому что я не могу понять, что вы думаете, что пытаетесь сделать, чтобы этот код мог быть хорошим решением!


_Q12_

Вы правы, в моем методе есть объявление событий.
Я думал, что они будут причиной для проблеска секунды, но я предпочитаю искать в интернете.

_Q12_

У тебя отличный детективный глаз. Спасибо! Это решило мою проблему.
Теперь работает мурлыканье.
5 звезд

OriginalGriff

Всегда пожалуйста!