日期:2014-05-18  浏览次数:20898 次

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

------解决方案--------------------
不知道你为什么一个月调用一次timer。

①你可以使用windows的执行计划,设置一下就好。
②建立一个WindowsService,设定执行时间。下面是我用的一个WindowsService的代码,请参照。

C# code

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(&quo