timer 控件可以设置启动时间为30天吗? 我现在使用timer控件设置每隔30天自动运行一下,但是timer设置Interval为2592000000(也就是30天)的时候说超出int32范围了,请问该如何解决 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果这个程序只有一个任务去执行,建议做成windows计划任务啊 你可以设置多个Timer,一个Timer触发后设置另一个Timer开始计时,或者可以记录个当前日期的变量然后与当前日期比较。 使用window自動調用bat比較簡單 如果你是想每个月底执行一下的话,完全没必要用timer去设定30天,你可以定时检查当前日期是否是月底 一個月執行一次,用timer沒有意義。 不知道你为什么一个月调用一次timer。①你可以使用windows的执行计划,设置一下就好。②建立一个WindowsService,设定执行时间。下面是我用的一个WindowsService的代码,请参照。public Service1() { InitializeComponent(); Random rd = new Random(); int intM = rd.Next(02, 03); int intS = rd.Next(00, 59); string str = System.Reflection.Assembly.GetExecutingAssembly().Location; string str1 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; Console.WriteLine(str); Console.WriteLine(str1); Console.WriteLine(intM); Console.WriteLine(intS); } protected override void OnStart(string[] args) { EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述 writestr("服务启动");//自定义文本日志 System.Timers.Timer t = new System.Timers.Timer(); t.Interval = 1000; t.Elapsed += 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; Random rd = new Random(); int intM = rd.Next(02, 03); int intS = rd.Next(00, 59); if (intHour == 08 && intMinute == intM && intSecond == intS) ///定时设置,判断分时秒 { try { System.Timers.Timer tt = (System.Timers.Timer)source; tt.Enabled = false; SetInnPoint(); tt.Enabled = true; } catch (Exception err) { writestr(err.Message); } } } //我的方法 public static void SetInnPoint() { try { writestr("服务运行"); //这里执行你的东西 Process.Start(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\KQLoginIn.exe"); 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 += (sender, e) => { timer.Enabled = false; action(); }; timer.Enabled = true; } public static void writestr(string readme) { //debug================================================== //StreamWriter dout = new StreamWriter(@"c:/" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt"); using (StreamWriter dout = new StreamWriter(@"c:/" + "WServ_InnPointLog.txt", true)) { dout.Write(String.Format("/r/n事件:{0}/r/n操作时间:{1:yyy-MM-dd HH:mm:ss}", readme, System.DateTime.Now)); //debug================================================== dout.Close(); } } protected override void OnStop() { writestr("服务停止"); EventLog.WriteEntry("我的服务停止"); } 我認為這樣不好,還是把你這程式放到一個排程中,每30啟動一下,還應該有LOG記錄 XDocument 取值 微软文档的异步客户端例子bug吗?? 求助:正则表达式 winform下,绑定到datagrid的时间数据没有时,分,秒该怎么办? 请问如何创建一个文件目录 C# 菜鸟提问 用C# Winform写CNZZ微缩网址生成器求代码 求个正则,大家帮帮忙吧,急啊[在线等] 小问题,大家来看看 ComboBox类(MouseMove事件) 时间获取毫秒有可能是0吗? C# 读取Excel?
②建立一个WindowsService,设定执行时间。下面是我用的一个WindowsService的代码,请参照。
public Service1()
{
InitializeComponent(); Random rd = new Random();
int intM = rd.Next(02, 03);
int intS = rd.Next(00, 59); string str = System.Reflection.Assembly.GetExecutingAssembly().Location;
string str1 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; Console.WriteLine(str);
Console.WriteLine(str1);
Console.WriteLine(intM);
Console.WriteLine(intS);
} protected override void OnStart(string[] args)
{
EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述
writestr("服务启动");//自定义文本日志
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed += 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;
Random rd = new Random();
int intM = rd.Next(02, 03);
int intS = rd.Next(00, 59); if (intHour == 08 && intMinute == intM && intSecond == intS) ///定时设置,判断分时秒
{
try
{
System.Timers.Timer tt = (System.Timers.Timer)source;
tt.Enabled = false;
SetInnPoint();
tt.Enabled = true;
}
catch (Exception err)
{
writestr(err.Message);
}
}
}
//我的方法
public static void SetInnPoint()
{
try
{
writestr("服务运行");
//这里执行你的东西
Process.Start(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\KQLoginIn.exe");
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 += (sender, e) =>
{
timer.Enabled = false;
action();
};
timer.Enabled = true;
} public static void writestr(string readme)
{
//debug==================================================
//StreamWriter dout = new StreamWriter(@"c:/" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt");
using (StreamWriter dout = new StreamWriter(@"c:/" + "WServ_InnPointLog.txt", true))
{
dout.Write(String.Format("/r/n事件:{0}/r/n操作时间:{1:yyy-MM-dd HH:mm:ss}", readme, System.DateTime.Now));
//debug==================================================
dout.Close();
}
}
protected override void OnStop()
{
writestr("服务停止");
EventLog.WriteEntry("我的服务停止");
}