计时器方法未触发
本文关键字:方法 计时器 | 更新日期: 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);
再次感谢大家