C#定时器停止

Daw*_*per 0 c# timer

对于测试我设置了一个简单计算int每秒的类:

class TestComp1
{
    public TestComp1()
    {
        var timer = new Timer(o => TestInt++,null,0,1000);
    }

    [ViewableProperty]
    public int TestInt { get; set; } = 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是这Timer似乎在大约一分钟后停止工作.
如果我重写它使用一个Thread而不是它继续工作.所以它似乎真的是停止的计时器.

有没有人知道为什么会这样?

小智 5

您没有引用构造函数范围之外的计时器.构造函数完成的那一刻,不再引用计时器,垃圾收集器将收集它.

您可以通过使用计时器的字段(或任何其他阻止没有您需要计时器的引用的东西来修复它.)

class TestComp1
{
    private Timer _timer;

    public TestComp1()
    {
        _timer = new Timer(o => TestInt++,null,0,1000);
    }

    [ViewableProperty]
    public int TestInt { get; set; } = 0;
}
Run Code Online (Sandbox Code Playgroud)