#c# #timer
#c# #таймер
Вопрос:
Для теста я создал класс, который просто подсчитывает int
каждую секунду:
class TestComp1
{
public TestComp1()
{
var timer = new Timer(o => TestInt ,null,0,1000);
}
[ViewableProperty]
public int TestInt { get; set; } = 0;
}
Проблема в том, что Timer
, похоже, это перестает работать примерно через одну минуту.
Если я перепишу его, чтобы Thread
вместо него использовать a, он продолжит работать. Так что, похоже, это действительно таймер, который останавливается.
У кого-нибудь есть идеи относительно того, почему это происходит?
Комментарии:
1. Какой тестовый фреймворк вы используете? Или вы используете какое-то приложение? веб-сайт?
2. Я использую NUnit с Resharper Testrunner.
Ответ №1:
У вас нет ссылки на таймер вне области действия конструктора. В тот момент, когда конструктор завершен, на таймер больше не ссылаются, и он будет собран сборщиком мусора.
Вы можете исправить это, используя поле для таймера (или что-нибудь еще, что предотвращает отсутствие ссылки там, где вам нужен таймер.)
class TestComp1
{
private Timer _timer;
public TestComp1()
{
_timer = new Timer(o => TestInt ,null,0,1000);
}
[ViewableProperty]
public int TestInt { get; set; } = 0;
}
Комментарии:
1. Ну, это действительно была проблема. Ура для неожиданного сбора мусора =)