首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

议程提醒

2013-01-23 
日程提醒日程提醒功能终于实现了,之前总是出现提醒不稳定问题,现在终于解决啦,放于此处,供有需要的朋友参

日程提醒

      日程提醒功能终于实现了,之前总是出现提醒不稳定问题,现在终于解决啦,放于此处,供有需要的朋友参考

        #region 日程监视事件

        private void timer1_Tick(object sender,EventArgs e)
        {
            try
            {                
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.Load(CommonClass.Path);
                XmlNode clocks = xmldoc.SelectSingleNode("/root/clocks");
                DateTime nowtime = DateTime.Now;    //获取当前系统时间
                foreach(XmlNode clock in clocks.ChildNodes)
                {
                    string time = clock.ChildNodes[0].InnerText;
                    if(time == nowtime.ToString("HH:mm"))
                    {
                        string content = clock.ChildNodes[1].InnerText;
                        string repeat = clock.ChildNodes[2].InnerText;
                        CommonClass.currentclock = time;    //保存最新的日程提醒时间                        
                        if(repeat == "单次")
                        {
                            CommonClass.deleteXML(time,content,repeat);
                        }
                        alarm a = new alarm(content, CommonClass.currentclock); //定义日程提示界面对象
                        a.Show();   //弹出日程提醒界面
                        timer1.Stop();  //暂停定时器,实现只弹出一个日程提醒框,否则会弹出60个
                        break;
                    }
                }
            }
            catch
            {
                MessageBox.Show("日程提醒出现异常");
            }            
        }
        #endregion 
2楼mdbsdn昨天 14:19
我做了个类似程序一到指定时间就弹出个提醒框,现在是一秒钟判断一次,但感觉效率不高,博主有什么好的办法改变下.....
Re: mzbxzhdxmyb昨天 14:31
回复mdbsdnn这位朋友,你好,这个问题我已经解决了,但由于回复板的条件限制,不方便沟通,请加1634562626
Re: mdbsdn昨天 15:46
回复mzbxzhdxmybn非常感谢博主的分享精神,上班不好上Q,博主不如再简单的再写一篇关于这个问题的博文,好让同样遇到这个问题的朋友们都能看到....
Re: mzbxzhdxmyb昨天 15:55
回复mdbsdnn我暂时也是每秒判断一次,但每当完成一个日程提醒后暂停一分钟,一分钟后重新启动。但是这样频繁读取XML文档,我担心可能对硬盘会有所伤害,所以现在我就将XML与ArrayList结合起来,每次读取ArrayList中的内容而避免直接操作XML文档。正在考虑1楼朋友的建议
1楼zhoujielunzhimi昨天 15:41
日程提醒,对于简单的,可以一直tick,明显效率不高。如果一开始的时候就获取 距离日程时间还有多长,然后只tick一次(如果有多个,可以考虑第一个日程到达时,再去tick第二个),避免定时器一直tick。
Re: mzbxzhdxmyb昨天 18:27
回复zhoujielunzhimin您好,按照这样的思路,我是这样想的:新增一个线程用来控制timer的开始,日程提醒后,将该线程sleep,睡眠时间为到下一个日程提醒的时间间隔(微小于它)。但是有一个问题是,新增的线程如何控制窗体中的timer?我在窗体加载事件中这样定义:nThreadStart start = new ThreadStart(this.StartTimer);nThread clock = new Thread(start);nclock.Start();nn在这个类中存在StartTimer方法,该方法内容为:n MessageBox.Show("clockStart"); //测试时可以实现n Thread.Sleep(3000);n MessageBox.Show("clockAgainStart"); //测试时可以实现n timer1.Enabled = true; //测试时不可以实现,即lbtime无内容显示nntimer的tick事件内容为:nlbtime.Text = DateTime.Now.ToString() + " " + DateTime.Now.DayOfWeek.ToString();nn不知道为什么无法控制窗体中的timer,不知道您是如何做的?
Re: zhoujielunzhimi昨天 08:57
回复mzbxzhdxmybn不需要用线程。n比如有3个提醒,分别在10s,30s,55s,那么窗体加载后,定时10s,10s后弹出第一个提醒,再重新设置定时20s,如此。。。
Re: mzbxzhdxmyb昨天 13:41
回复zhoujielunzhimin不知道动态改变timer的Interval是否可以实现?我来试试
Re: mzbxzhdxmyb昨天 13:50
回复zhoujielunzhimin用户可以动态改变日程,即随时删除、随时增加、随时更改呢?
Re: zhoujielunzhimi昨天 13:54
回复mzbxzhdxmybn动态改变timer的Interval,我就是这个意思。n比如有个Init函数用来获取第一个最近的日程提醒,然后开始定时。n动态删除或者增加后,禁止定时器,再调用Init。n当第一个定时到了之后,先禁用定时器,并且删除这个日程后再去Init
Re: mzbxzhdxmyb昨天 14:02
回复zhoujielunzhimin谢谢你,功能实现啦,现在不需要每秒tick了,这个日程提醒功能是按照实际需求开发的,所以比较实用,谢谢!

热点排行