定时器方法没有触发

时间:2014-08-13 07:02:34

标签: c# timer console

我使用以下代码每隔5分钟将一条消息打印到控制台,但是Timer没有接缝被触发。有什么问题?

我想每隔10秒调用一次MyMethod(),但只调用一次

    using System;
using System.Threading;

namespace ThreadProgram
{
    class Program
    {
        private static System.Threading.Timer timer = new System.Threading.Timer((e) =>
        {
            MyMethod();
        }, null, 0, TimeSpan.FromSeconds(10).Milliseconds);

        static void Main(string[] args)
        {
            Console.WriteLine("----Calling my method----");
            Console.ReadLine();
        }

        private static void MyMethod()
        {
            Console.WriteLine("*** Method is executed at {0} ***", DateTime.Now);
            Console.ReadLine();
        }
    }
}

提前感谢您的建议

4 个答案:

答案 0 :(得分:2)

此代码存在两个问题。首先是计时器未启动。

在主方法中拨打timer.Start();

但还有另一个问题,因为你的代码甚至无法编译。您正尝试从计时器中调用MyMethod;但这不可能,因为MyMethod不是静态的。

您的代码将更改为以下内容:

static void Main(string[] args)
{
     Console.WriteLine("----Calling my method----");
     timer.Start();
     Console.ReadLine();
}

private static void MyMethod()
{
    Console.WriteLine("*** Method is executed at {0} ***", DateTime.Now);
    Console.ReadLine();
}

最后,计时器的签名是错误的。它应该是一个静态计时器,也是计时器的最后一个参数,周期,需要一个整数。 Timespan.TotalMiliseconds会返回一个双精度内容,因此您最好使用.Miliseconds

private static System.Threading.Timer timer = new System.Threading.Timer(state => MyMethod(), null, 0, TimeSpan.FromMinutes(5).Milliseconds);

答案 1 :(得分:1)

您需要启用并启动计时器,如下所示: -

static void Main(string[] args)
        {
            Console.WriteLine("----Calling my method----");
            timer.Start();
            Console.ReadLine();

        }

我刚刚调试了你的代码,它需要你的MyMethod是静态的,否则它甚至不会编译

并且Timer的签名是错误的,因为TotalMiliseconds返回double并且它重新使用int所以最好使用.Milliseconds + make your timer static尝试下面的代码,否则它将无法在Main方法中访问: -

 private static System.Threading.Timer timer = new System.Threading.Timer((e) =>
        {
            MyMethod();
        }, null, 0, TimeSpan.FromMinutes(5).Milliseconds);

答案 2 :(得分:0)

class Program
{
  static Timer timer = new Timer(TimeSpan.FromMinutes(5).Milliseconds);

  static void Main(string[] args)
  {
    Console.WriteLine("----Calling my method----");
    timer.AutoReset = true;
    timer.Elapsed += timer_Elapsed;
    timer.Start();
    Console.ReadLine();
  }

  static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {
    MyMethod();
  }

  private static void MyMethod()
  {
    Console.WriteLine("*** Method is executed at {0} ***", DateTime.Now);
    Console.ReadLine();
  }
}

试试这个

using Timer = System.Timers.Timer;

答案 3 :(得分:0)

朋友们,我得到了答案,但感谢大家的宝贵建议 我在我的程序中所做的更改如下,这可能对将来的引用有用

static System.Threading.Timer timer = new System.Threading.Timer((e) =>
        {
            MyMethod();
        }, null, 0, TimeSpan.FromSeconds(20).Seconds);

再次感谢所有