我使用以下代码每隔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();
}
}
}
提前感谢您的建议
答案 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);
再次感谢所有