我现在使用timer控件设置每隔30天自动运行一下,但是timer设置Interval为2592000000(也就是30天)的时候说超出int32范围了,请问该如何解决

解决方案 »

  1.   

    如果这个程序只有一个任务去执行,建议做成windows计划任务啊
      

  2.   

    你可以设置多个Timer,一个Timer触发后设置另一个Timer开始计时,或者可以记录个当前日期的变量然后与当前日期比较。
      

  3.   

    使用window自動調用bat比較簡單
      

  4.   

    如果你是想每个月底执行一下的话,完全没必要用timer去设定30天,你可以定时检查当前日期是否是月底
      

  5.   

    一個月執行一次,用timer沒有意義。 
      

  6.   

    不知道你为什么一个月调用一次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("我的服务停止");
            }
      

  7.   

    我認為這樣不好,還是把你這程式放到一個排程中,每30啟動一下,還應該有LOG記錄