今天和同事一起研究了下windows服务程序中的Timer控件的写法.
我们在建立一个windows服务程序后,要用到计时器的话一般都会想到Timer控件,于是到工具器把Timer控件拉过来,双击写事件,设置时间,哇,成功了....
但服务一跑起来,唉,怎么回事,时间到了怎么没有执行事件呢???????
后来,我找很多资料才知道,这个Timer控件是winForm下的,不能用在windows服务程序中.
怎么办呢.......
打开"工具箱"---右键---"选择项"---找到Timer控件,看好了,这个Timer控件的是system.Timer下的.可不是System.Windows.Form.然后添加.
双击...写事件...
if
(strSelectedItemName
==
"
GetURCBValues
"
)
{
this .timer1.Enabled = true ;
this .timer1.Start();
return ;
}
else
{
this .timer1.Stop(); // 停止计时
}
{
this .timer1.Enabled = true ;
this .timer1.Start();
return ;
}
else
{
this .timer1.Stop(); // 停止计时
}
1. 定义在 System.Windows.Forms 里
2. 定义在 System.Threading.Timer 类里 "
3. 定义在 System.Timers.Timer 类里
System.Windows.Forms.Timer 是应用于 WinForm 中的,它是通过 Windows 消息机制实现的,类似于 VB 或 Delphi 中的 Timer 控件,内部使用 API SetTimer 实现的。它的主要缺点是计时不精确,而且必须有消息循环, Console Application( 控制台应用程序 ) 无法使用。
System.Timers.Timer 和 System.Threading.Timer 非常类似,它们是通过 .NET Thread Pool 实现的,轻量,计时精确,对应用程序、消息没有特别的要求。 System.Timers.Timer 还可以应用于 WinForm ,完全取代上面的 Timer 控件。它们的缺点是不支持直接的拖放,需要手工编码。
例:
使用 System.Timers.Timer 类
System.Timers.Timer t
=
new
System.Timers.Timer(
10000
);
//
实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout); // 到达时间的时候执行事件;
t.AutoReset = true ; // 设置是执行一次(false)还是一直执行(true);
t.Enabled = true ; // 是否执行System.Timers.Timer.Elapsed事件;
public void theout( object source, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show( " OK! " );
}
t.Elapsed += new System.Timers.ElapsedEventHandler(theout); // 到达时间的时候执行事件;
t.AutoReset = true ; // 设置是执行一次(false)还是一直执行(true);
t.Enabled = true ; // 是否执行System.Timers.Timer.Elapsed事件;
public void theout( object source, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show( " OK! " );
}