4

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

2 回答 2

1

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

于 2012-04-09T16:05:04.440 回答
1

你构造了一个实例Timerr吗?你打电话Run给那个实例了吗?您是否保留了该实例以使计时器不被 GC(System.Threading.Timers 不会像 s 那样自动植根System.Timers.Timer)?您是否有一些繁忙的循环或其他方式使您的进程保持足够长的时间以允许调用计时器回调?

于 2012-04-09T15:56:28.620 回答