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

时间:2012-04-09 15:48:37

标签: c# timer

我正在尝试使用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();
    }
}

2 个答案:

答案 0 :(得分:2)

这适用于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,您可以快速检查这些内容,而无需运行整个应用程序

答案 1 :(得分:1)

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