当前位置:编程学习 > C#/ASP.NET >>

此处为啥会弹窗两次,求助。。急。。在线等。。。

代码举例:
private void timer1_Tick(object sender, EventArgs e)
        {
            if (dt.ToString() == DateTime.Now.ToString ())
            {
                Form2 fm = new Form2();
                fm.Show ();
            }
        }
此处会弹出两个窗体

做闹钟时遇到此问题,此代码是测试代码,dt比当前时间晚五秒   弹窗 时钟 时间 弹窗两次 时钟 时间 --------------------编程问答-------------------- 求助大神呀。。。。。大神呢 --------------------编程问答-------------------- private void timer1_Tick(object sender, EventArgs e)
         {
             timer1.Stop();
             if (dt.ToString() == DateTime.Now.ToString ())
             {
                 Form2 fm = new Form2();
                 fm.Show ();
             }
             timer1.Start();
         } --------------------编程问答-------------------- private void timerTimeLeft_Tick(object sender, EventArgs e)
        {
            if (timeLeftCount == (Convert.ToInt32(txtSelfSetTime.Text)) * 60 * 2)
            {
                FrmAlarm fAlarm = new FrmAlarm();
                fAlarm.Show();
            }
            timeLeftCount++;
        }
大神,为什么这样就不会谈两个窗体呢? --------------------编程问答-------------------- 不过要知道,表达式 dt.ToString() == DateTime.Now.ToString () 成立的可能性很小。

如果你把 Interval 设置的很短,那么这又是一种很容易变成“一锅海鲜汤里的一粒老鼠屎”的东西。只要团队中有人滥用timer,那么本来程序运行的很流程,可能会突然变得奇慢无比了,而且还很难查找bug。

当你需要未来多少秒钟之后弹出提示,那么你设置 Interval 就是这个秒钟数就行了。也就是说 Tick 事件之需要触发一次!而不是滥用 timer 来不断触发! --------------------编程问答-------------------- 实际上你的 Tick 触发了可能 1000 次,但是这 1000 次中只有两次当它触发时恰好符合 dt.ToString() == DateTime.Now.ToString () 这个条件,其它998次都白白占用CPU触发了。

还好你这里便没有什么耗时的操作。稍微不慎,这个Tick就是个老鼠屎。 --------------------编程问答-------------------- 我是在闹钟里用于设定时间于当前时间的比对,觉得用时钟比较方便,比知道大神有啥好的建议;
发现这个问题后,我就先算出时差,然后用时钟计数来比对,这样只谈一次窗,但是感觉绕弯了。。 --------------------编程问答-------------------- 比较急有错字,大神谅解哈 --------------------编程问答-------------------- 比如说你们班里的“组长”让你写几行程序,当窗体被鼠标拖动而靠近windows桌面边框时,进行处理。

你会写一个50毫秒的timer_tick来处理吗?如果你会这样想,我要警告你,立刻悬崖勒马。你在做一种将来的程序设计师所讨厌的设计,而你可能还觉得自己好像很会用timer似地。这个时候进行设计,要知道如何捕获真正的控件移动(move)事件,而放弃什么timer。

我知道有些人滥用timer是什么习惯。这是很不好的习惯。 --------------------编程问答-------------------- 刚学C#,菜鸟一枚,望大神多指点指点 --------------------编程问答-------------------- 那闹钟怎么判断设定时间(一组时间)和当前时间相等比较好 --------------------编程问答-------------------- 比如说将要在 1:20:35.789 之后闹铃,如果仅仅是这么简单的需求,你也许可以每隔500毫秒去比较一下。但是这种简单的设计,如果你滥用了,就麻烦了。

对于timer来说,它就是让你设置一个时间段的。例如假设 Interval 最大只能是 30 分钟,那么当你判断 1:20:35.789 大于 30分钟,你的时钟就应该在 30 分钟之后才触发 timer_Tick 一次。然后再次设置 Interval 为 30分钟。然后30分钟之后再次设置为 20分钟35.678秒(因为需要根据 dt 重新计算时间差)。

怎么能在明知道还有超过30分钟距离时就去提前触发 Tick 呢? --------------------编程问答-------------------- 恩,您说的有理
我举个例子:
因为时间设置是用户随机的,比如,现在十二点(闹钟暂不考虑秒)  在12:05  12:20 12:30 12:50有三次闹钟,我觉得用时钟比对时间是最简便的方法 ,但是会弹出两次提醒窗口,不知道您觉得怎么样比较好,市面上的闹钟软件的核心算法是怎么样的 --------------------编程问答-------------------- 我说过了,由于你的 Interval 设置比较短,于是成千上万次的 timer_Tick 中有两次连续触发时都能让你的比较表达式成立(因为系统还没有更新 DataTime.Now.ToString()的值)。

但是这时以成千上万次无意义的 timer_Tick 为代价的。这样的设计习惯,如果放到正规的产品中,是会轻易地弄垮程序的。 --------------------编程问答-------------------- 嗯嗯,知道了,谢谢了哈
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,