问题描述
大神们你们好,之前写了个C#导数据程序,从服务器导数据到本地的文件夹中,生成若干txt文件。但是我想实现每天晚上22点自动运行这个程序怎么办?另外程序中有一个button需要手动点击的,自动运行没法点击这个button如何解决呀?我在网上看到有教学帖做C#的windows服务,然后创建了一个服务,可以随时启动。但是解决不了问题呀?我在服务的Onstart中加了一块代码如下:while(true){stringi;i=DateTime.Now.TimeOfDay.ToString();switch(i)//判断当前时间是否是晚上10点{case("22:00:00"):try{SqlConnectionconn1=newSqlConnection();conn1.ConnectionString="DataSource=.;Database=~;Uid=~;Pwd=~";if(conn1.State==ConnectionState.Closed){conn1.Open();}SqlCommandsqlcmd=newSqlCommand("selectnamefromsys.tableswherenamenotin('C_Batch_Loads','A_Batch_Loads','A_Cases','C_Cases','A_CaseDiaryNotes','C_CaseDiaryNotes')and(namelike'A[_]%'ornamelike'C[_]%')",conn1);SqlDataAdaptersk=newSqlDataAdapter(sqlcmd);DataSetds1=newDataSet();sk.Fill(ds1);DataTabletable=newDataTable();dataGridView1.DataSource=ds1.Tables[0];dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;dataGridView1.Columns.Add("time","time");dataGridView1.Columns.Add("Rownum","Rownum");}catch{MessageBox.Show("连接数据库异常,请检查连接条件");}break;}代码如上图,然后我用switchcase判断当前时间是否为晚上10点,然后把之前写的代码都放在case后面,最后加个break.不知道这样可行否?另外我在windowsservice1中添加gridview控件看不了,运行程序的时候会显示启动服务失败。
解决方案
解决方案二:
然后我创建一个windows服务,windowsservice1也启动不了,一直读条。上面写的switchcase应该只是控制case里面的代码吧。跟服务启动应该没有关系的吧
解决方案三:
哪那么巧合就能正好满足case("22:00:00")的条件?你的条件太苛刻了,只要超过1毫秒就不能匹配了。你还是应该根据这个提示,自己好好现象业务逻辑。再说你在服务里边MessageBox.Show这也没有任何意义啊。
解决方案四:
控制面板->管理工具->任务计划程序->(右侧)创建基本任务->运行你的程序
解决方案五:
stringtoday=DateTime.Now.ToString("HH");try{WriteInLog(DateTime.Now+"进行time触发",false);//获取所有用户//如果时间处在4点时间点,将会执行定义的任务if(today=="22"){}然后服务随便找个时间启动。然后22点就执行了/
解决方案六:
标准的计划任务程序,写一个Console程序,放到计划任务中,定时到每天22点执行吧MessageBox.Show,这个放到事件日志里面去,每天检查一下日志看看是不是有出错。如果想再智能一点,出错了就发送邮件或短信或其他消息之类的。
解决方案七:
下面是Insus.NET在项目使用的一个方法,它是在每天7:10处理一个事件:
解决方案八:
当然你可以定义到具体的年,月,日,时,分,秒均行啦!!!
解决方案九:
引用4楼kongwei521的回复:
stringtoday=DateTime.Now.ToString("HH");try{WriteInLog(DateTime.Now+"进行time触发",false);//获取所有用户//如果时间处在4点时间点,将会执行定义的任务if(today=="22"){}然后服务随便找个时间启动。然后22点就执行了/
晕!这会重复执行多少遍啊?!!!!
解决方案十:
你可以在你的服务中设置一个变量保存“上一次执行时间”,例如privatestaticDateTime上次执行时间;
然后在你判断所谓的case("22:00:00"):之前先判断上一次执行时间变量,看看其值是不是小于凌晨0点。如果当天已经执行过,后边的判断就是多余的了。如果其值确实小于当天凌晨0点,那么你只要判断当前时间是不是超过(或者等于)22点,只要“是”就立刻执行你的动作(首先要为这个变量赋值,以免重复进入操作)。因此这里的核心是,不要用“相等”来判断时间。哪有那么巧合的事情“正好在比较当前时间时连一毫秒都不差”呢?这里的核心是用<、>=这样的比较规则,而是用==比较。说得更白一点,就是编程设计要用心理解、提高悟性。
解决方案十一:
而是用==比较-->而并不是用==比较比如说你的程序因为某些“主线程卡顿”或者其他任何原因,在22点零2分才执行判断语句,请问你执行必要的操作吗?肯定要执行。因此用自己悟性而不是靠抄袭别人的代码,你修改自己的业务逻辑描述方式,你会比那些以为给你代码抄写的人提高得更快!