System.Windows.Forms : 控件
是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中 的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。
System.Threading.Timer
System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求
System.Timers.Timer
System.Timers.Timer还可以应用于WinForm,完全取代上面的 Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。
//实例化Timer类,设置间隔时间为10000毫秒;
System.Timers.Timer t = new System.Timers.Timer(10000);
//到达时间的时候执行事件;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
//设置是执行一次(false)还是一直执行(true);
t.AutoReset = true;
//是否执行System.Timers.Timer.Elapsed事件;
t.Enabled = true;
public void theout(object source, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("OK!");
}
定时任务
public partial class CommandTimerTask
{
#region 定时检查
Thread cmdCheckThread = null;
/// <summary>
/// 数据上报线程
/// </summary>
public void CheckCmdTimerThread()
{
#region 数据上报线程
Panda.Framework.Helper.ConsoleHelper.WriteInfoLine("==》定时检查未发送指令服务启动");
cmdCheckThread = new Thread(CheckCmdTimerTask);
cmdCheckThread.Start();
Panda.Framework.Helper.ConsoleHelper.WriteInfoLine("==》定时检查未发送指令服务完成");
#endregion
}
private async void CheckCmdTimerTask()
{
#region 定时检查未发送指令
if (GloalConfigs.CheckCmdTimerTaskRunStatus)
{
return;
}
GloalConfigs.CheckCmdTimerTaskRunStatus = true;
var productConfig = Panda.Framework.PorductSettings.GetConfigInfo();
while (GloalConfigs.CheckCmdTimerTaskRunStatus)
{
#region 定时检查指令
try
{
#region 业务功能
Panda.Framework.Helper.ConsoleHelper.WriteSuccessLine($"定时检查指令:开始...");
....
#endregion
}
catch (Exception ex)
{
Panda.Framework.Helper.ConsoleHelper.WriteInfoLine($"CheckCmdTimerTask Thread error,{ ex.Message }");
}
finally
{
Panda.Framework.Helper.ConsoleHelper.WriteInfoLine($"定时检查指令:下次执行时间{ DateTime.Now.AddMilliseconds(GloalConfigs.CheckCmdTimerTaskSleep).ToString("yyyy-MM-dd HH:mm:ss") }");
await Task.Delay(GloalConfigs.CheckCmdTimerTaskSleep);
}
#endregion
}
#endregion
}
#endregion
}