c#定时器停止

本文关键字:定时器 | 更新日期: 2023-09-27 18:13:06

对于一个测试,我设置了一个类,它只计算每秒一个int:

class TestComp1
{
    public TestComp1()
    {
        var timer = new Timer(o => TestInt++,null,0,1000);
    }
    [ViewableProperty]
    public int TestInt { get; set; } = 0;
}

问题是这个Timer似乎在大约一分钟后停止工作。
如果我用Thread来重写它,它仍然可以工作。所以看起来真的是计时器停止了。

有人知道为什么会发生这种情况吗?

c#定时器停止

在构造函数的作用域之外没有对计时器的引用。构造函数完成后,计时器将不再被引用,并将被垃圾收集器收集。

你可以通过为计时器使用一个字段来修复它(或者其他任何可以防止在需要计时器的地方没有引用的东西)

class TestComp1
{
    private Timer _timer;
    public TestComp1()
    {
        _timer = new Timer(o => TestInt++,null,0,1000);
    }
    [ViewableProperty]
    public int TestInt { get; set; } = 0;
}