.NET 包含四个名为 Timer的类。
分别是:
System.Timers.Timer :用作多线程环境中基于服务器的或服务组件; 它没有用户界面,在运行时不可见
System.Threading.Timer :用作多线程环境中基于服务器的或服务组件; 它没有用户界面,在运行时不可见
System.Windows.Forms.Timer(仅 .NET Framework) :最宜用于Windows 窗体应用程序中,并且必须在窗口中使用
System.Web.UI.Timer(仅 .NET Framework):在固定时间间隔内执行异步或同步网页回发的 ASP.NET 组件。
那么如何试用他们呢?
class Program
{
static void Main(string[] args)
{
//第一种:System.Timers.Timer
System.Timers.Timer systemTimer = new System.Timers.Timer(2000);
systemTimer.Elapsed += FunctionTypeOne;
systemTimer.AutoReset = true;//是否重复执行
systemTimer.Start();//等同于将 Enabled 设置为 true ----> 引发 Elapsed 事件。
//systemTimer.Stop(); //等同于将 Enabled 设置为 false ----> 停止引发 Elapsed 事件。
//systemTimer.Dispose(); //释放 Component 使用的所有资源。
//第二种:System.Threading.Timer
System.Threading.Timer threadTimer = new System.Threading.Timer(FunctionTypeTwo);
threadTimer.Change(0, 5000);
//为什么没有stop()?
//因为它与任何托管对象一样,当不存在任何引用时,Timer 可能会进行垃圾回收,
//即使 Timer 仍处于活动状态,也不会阻止收集它。
//threadTimer.Dispose();
Console.ReadLine();
}
private static void FunctionTypeOne(object sender, ElapsedEventArgs e)
{
Console.WriteLine("这是systemTimer," + e.SignalTime);
}
private static void FunctionTypeTwo(object state)
{
Console.WriteLine("formTimer," + DateTime.Now.ToString());
}
}
下面是System.Windows.Forms.Timer
public partial class Form1 : Form
{
//最宜用于Windows 窗体应用程序中,并且必须在窗口中使用
private static System.Windows.Forms.Timer formTimer = new System.Windows.Forms.Timer();
public Form1()
{
formTimer.Tick += new EventHandler(FunctionTypeThree);
formTimer.Interval = 3000;
formTimer.Start();
}
private static void FunctionTypeThree(object sender, EventArgs e)
{
MessageBox.Show("formTimer," + DateTime.Now.ToString());
}
}
最后一个是UI.Timer,在 .aspx页中试用
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<%--在固定时间间隔内执行异步或同步网页回发的 ASP.NET 组件。--%>
<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="3000" />
时间:<asp:Label id="TimeOfPrice" runat="server"></asp:Label>
</form>
<script runat="server">
protected void Timer1_Tick(object sender, EventArgs e)
{
TimeOfPrice.Text = DateTime.Now.ToLongTimeString();
}
</script>
</body>