关于windows服务中的轮询(急)
用C#(.net)建了一个windows service的工程,并完成了这个服务程序,执行都正常,但我希望能10分钟执行一次,不知如何写?网上查到,可以加入Timer,用它来进行轮询,但我在onStart()事件中加入了timer1.Enabled = true;当然在onStop()事件中加入了timer1.Enabled = false;服务可以运行,但并没有轮询,为何?应该怎么写呢?
请指教! --------------------编程问答-------------------- ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_radcon/html/e24d8a3d-edc6-485c-b6e0-5672d91fb607.htm --------------------编程问答-------------------- 谢谢,但上楼上的网站,我打不开呀:( --------------------编程问答-------------------- 首先Timer控件要用System.Timers下的Timer控件,大概代码如下:
onStart()
{ timer1.Enabled = true; }
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer1.Enabled = false;
try
{
// 把你的逻辑类写在这里
}
catch(Exception exobj)
{ // 这里做异常处理 }
finally
{ timer1.Enabled = true; }
} --------------------编程问答-------------------- 多谢
timer1_Elapsed这个事情是什么时候会被调用的呢? --------------------编程问答-------------------- 服务不是都写在protected override void OnStart(string[] args){}
这个方法里吗? --------------------编程问答-------------------- like
public class StatService : System.ServiceProcess.ServiceBase
{
private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer(int.Parse(System.Configuration.ConfigurationSettings.AppSettings["AcceptTime"].ToString()));
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//doing somethind;
}
}
--------------------编程问答-------------------- 用线程,然后sleep 600000s --------------------编程问答-------------------- 用 Thread 的 time --------------------编程问答-------------------- 这个拖进来是一个system.windows.forms.timer
服务应用程序设计为长时间运行。因此,它通常轮询或监视系统中的情况。监视是在 OnStart 方法中设置的。但是,OnStart 实际上不进行监视。服务的操作开始之后,OnStart 方法必须返回到操作系统。它不能始终循环或阻止。若要设置简单的轮询机制,可以使用 System.Timers.Timer 组件。在 OnStart 方法中,可以设置组件上的参数,然后将 Enabled 属性设置为 true。然后,计时器将在代码中周期性地引发事件,此时,服务可以进行其监视工作。
微软这样说的,哪位有过这方面的经验。说下用什么,谢谢
--------------------编程问答-------------------- 服务是没有 Forms 的吧?
服务有窗体?服务都是没有界面的。 --------------------编程问答-------------------- 请看我的文章:http://blog.csdn.net/haukwong/article/details/7022628
public partial class Service : ServiceBase
{
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述
writestr("服务启动");//自定义文本日志
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
}
/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)
{
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
if (intHour == 13 && intMinute == 30 && intSecond == 00) ///定时设置,判断分时秒
{
try
{
System.Timers.Timer tt = (System.Timers.Timer)source;
tt.Enabled = false;
SetInnPoint();
tt.Enabled = true;
}
catch (Exception err)
{
writestr(err.Message);
}
}
}
//我的方法
public void SetInnPoint()
{
try
{
writestr("服务运行");
//这里执行你的东西
Thread.Sleep(10000);
}
catch (Exception err)
{
writestr(err.Message);
}
}
///在指定时间过后执行指定的表达式
///
///事件之间经过的时间(以毫秒为单位)
///要执行的表达式
public static void SetTimeout(double interval, Action action)
{
System.Timers.Timer timer = new System.Timers.Timer(interval);
timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Enabled = false;
action();
};
timer.Enabled = true;
}
public void writestr(string readme)
{
//debug==================================================
//StreamWriter dout = new StreamWriter(@"c:/" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt");
StreamWriter dout = new StreamWriter(@"c:/" + "WServ_InnPointLog.txt", true);
dout.Write("/r/n事件:" + readme + "/r/n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
//debug==================================================
dout.Close();
}
protected override void OnStop()
{
writestr("服务停止");
EventLog.WriteEntry("我的服务停止");
}
}
补充:.NET技术 , C#