为什么我使用System.Threading.Timer 不起作用

本文关键字:Threading Timer 不起作用 System 为什么 | 更新日期: 2023-09-27 18:30:35

我正在尝试使用System.Threading.Timer定期执行函数。它调用函数,但它不起作用,并且不报告错误。为什么?

 public class Timerr
 {
    ArrayList listurl;
    ArrayList listcategory;
    protected Collection<Rss.Items> list = new Collection<Rss.Items>();
    RssManager reader = new RssManager();
    System.Threading.Timer Timer;
    System.DateTime StopTime;
    public void Run()
    {
        StopTime = System.DateTime.Now.AddMinutes(1);
        Timer = new System.Threading.Timer(TimerCallback, null, 0,1000);
    }
    private void TimerCallback(object state)
    {
        if (System.DateTime.Now >= StopTime)
        {
            Timer.Dispose();
            return;
        }
        callrss();
    }
}

为什么我使用System.Threading.Timer 不起作用

在LINQPad中有效:

void Main()
{
    var t = new Timerr();
    t.Run();
    Thread.Sleep(60000);
}
public class Timerr
 {
    System.Threading.Timer Timer;
    System.DateTime StopTime;
    public void Run()
    {
        StopTime = System.DateTime.Now.AddMinutes(1);
        Timer = new System.Threading.Timer(TimerCallback, null, 0,1000);
    }
    private void TimerCallback(object state)
    {
        if (System.DateTime.Now >= StopTime)
        {
            Timer.Dispose();
            return;
        }
        Console.WriteLine("Hello");
    }
}

我建议您安装免费的 LINQPad,使用它您可以非常快速地检查这些内容,而无需运行整个应用程序

您是否构建了Timerr的实例?您是否在那个实例上致电Run?您是否保留了该实例,以便计时器不会被 GCed(System.Threading.Timer不会像 System.Timers.Timer s 那样自动植根)?您是否有一些繁忙循环或其他方法可以使进程保持活动足够长的时间以允许调用计时器回调?