Я думаю, вы можете удалить «GC.KeepAlive» из вашего ответа после разъяснения Джона Скита. :)

ентацияSystem.Threading.Timer говорит, что я должен иметь реальную ссылку на него, чтобы избежать его сбора мусора. Но где мне это сделать? мойmain очень просто, что я не знаю, где сохранить ссылку:

class Program {
    static void Main() {
        new System.Threading.Thread(myThreadStart).Start();
        new System.Threading.Timer(myTimerCallback, new MyStateObject(), 0, 5000);
    }
}

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

Ответы на вопрос(1)

Решение Вопроса

нет ничего плохого в том, чтобы сделать его закрытым статическим членом вашего класса Main. Это то, что я бы сделал, в любом случае.

 variable31 мар. 2014 г., 08:28
Также объявление таймера в области видимости класса предотвратит GC, не так ли?
 Joe25 янв. 2009 г., 15:20
+1 Это самое очевидное и простое решение.
 variable31 мар. 2014 г., 08:26
Можете ли вы предоставить образец в своем ответе

Ваш ответ на вопрос