计时器方法未触发

本文关键字:方法 计时器 | 更新日期: 2023-09-27 18:17:41

我使用以下代码每 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();
        }
    }
}

提前感谢您的建议

计时器方法未触发

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

在主方法中调用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();
}

最后,计时器的签名是错误的。它应该是一个静态计时器,并且计时器的最后一个参数 period 需要一个整数。 Timespan.TotalMiliseconds返回一个双精度,所以你最好用.Miliseconds

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

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

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

我刚刚调试了您的代码,它需要您的MyMethod是静态的,否则它甚至无法编译

计时器的签名是错误的,因为总毫秒数返回双倍并且它重新调用 int,因此最好使用 .毫秒 + make your timer static否则在 Main 方法中无法访问:-

 private static System.Threading.Timer timer = new System.Threading.Timer((e) =>
        {
            MyMethod();
        }, null, 0, TimeSpan.FromMinutes(5).Milliseconds);
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;
朋友们,

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

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

再次感谢大家