最近在做一个项目,需要每天定时获取数据。我有一张广告表(有广告主ID),有一张广告系列表(根据广告主ID获取数据)。其中广告表有4000多个数据,根据广告主ID获取到的系列数据大概百万条。需求:我想每天晚上24:00定时根据广告主ID获取广告系列的数据保存到数据库。应该怎么做?下面是我写的代码./// <summary>
        /// 服务启动的操作
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。
            StartGetData();
        }/// <summary>
        /// 服务启动,开始获取数据
        /// </summary>
        private void StartGetData()
        {
            try
            {
                //通过ThreadStart委托告诉子线程将执行什么方法。(这里执行获取广告主消耗数据的方法)
                ThreadAPI = new Thread(new ThreadStart(GetAdvertiserInfo));
                ThreadAPI.Start();//启动新线程
                System.Diagnostics.Trace.Write("线程任务开始");
            }
            catch (Exception ex)
            {
                Logger.Error("获取广告主消耗数据的方法错误!", ex);
            }
        }private void GetAdvertiserInfo()
        {
            //判断时间是否为当天的24:00
            if (DateTime.Now.ToShortTimeString().ToString() == "14:00" || DateTime.Now.ToShortTimeString().ToString() == "14:0")
            {
}
}...
其中,获取完系列后,还要获取其他的数据。我想用线程池做,就是广告系列获取完后,接着获取下面的数据。给些思路不胜感激。Thread线程池

解决方案 »

  1.   

    没必要这么麻烦吧,用js+Ajax实现吧。
      

  2.   

    这个好简单的,好多方式都可以实现。
    1、计划任务
    可以写一个简单的控制台应用程序,在main方法里面调用你的GetAdvertiserInfo()方法就可以了。
    然后使用系统的计划任务来执行这个控制台程序就可以了。(或者写个winform在load里面调用也一样)2、就用你现在这种系统服务
    就像你现在这样就可以了,但是需要在GetAdvertiserInfo()方法中加一个while死循环。
    例如:
    private void GetAdvertiserInfo()
    {
                while (true)
                {
                    if (xxx)
                    {
                        //.....
                    }
                }
    }也可以使用一个timer定时器,这样GetAdvertiserInfo()方法中就不需要死循环了。