Здравствуйте, _Morpheus_, Вы писали:

А>В приложении Windows Forms создаю таймер,запускаю и привязываю событие.

А>Далее этой же переменной присваиваю другой таймер,т.е. доступ к первому таймеру потерян.
А>При наступлении события запускаю сборщик мусора. По идее первый таймер должен быть уничтожен, но он работает. Пробовал и в Release и в Debug. У Рихтера похожий пример, все работает правильно.
А>Почему таймер не уничтожается,а если таких операций будет 1000? Это разве не утечка ресурсов? Я что то не понимаю.

_M_>Т.е. перед тем как менять значение переменной timer, нужно сделать следующее:

_M_>
_M_>timer.Enabled = false;

_M_>timer = new Timer();
_M_>


Пошарился Reflectorom
Если Enable = true;
То вызывается
 if (value)
                    {
                        if (this.timerWindow == null)
                        {
                            this.timerWindow = new TimerNativeWindow(this);
                        }
                        this.timerRoot = GCHandle.Alloc(this);
                        this.timerWindow.StartTimer(this.interval);
                    }

В MSDN про GCHandle.Alloc(this) есть такие слова:

Return Value
A new GCHandle that protects the object from garbage collection. This GCHandle must be released with Free when it is no longer needed.

Автор: BluntBlind    Оценить