永发信息网

C#中的交通信号灯问题,请帮忙具体解释下其中的部分程序,急求

答案:2  悬赏:50  手机版
解决时间 2021-03-21 19:13
private voidtimer1_Tick(object sender, EventArgs e)
{
Graphics g =this.CreateGraphics();
if (intTime!= 0)
{
if(intTime < 10)
{
label1.Text = "0" + intTime.ToString();
label1.ForeColor = Color.Red;
}
else
{
label1.Text = intTime.ToString();
label1.ForeColor = Color.Red;
}
intTime--;
intFalg= 1;
getFillColor();
}
else
{
label1.Text = "0" + intTime.ToString();
timer1.Enabled = false;
intFalg= 0;
intTime= 5;
timer1.Enabled = false;
timer3.Enabled = true;
}

}
最佳答案
你好,
关于C#中timer类 在C#里关于定时器类就有3个 (winform3个,wpf1个我们这里不说)
1.定义在System.Windows.Forms里 工具拖放(不精确)
2.定义在System.Threading.Timer类里 计时精确
3.定义在System.Timers.Timer类里 计时精确(对前者封装,增加了一些特性)
你这个从代码上看应该是用的第1个控件, 该计时器使用消息循环机制来取代线程池产生消息的机制,意味着Tick事件总是在创建timer的那个线程上执行(一般就是你的主线程),同时也意味着如果上一个Tick消息还未被处理,即使时间超过了间隔时间,在消息循环中也只存在一个Tick消息,换句话说, 也意味着可能会无限期的把实际要用的5秒计时变为100秒 1000秒.

虽然计时不精确,但是是单线程,永远只执行一个,不会出现同一时间两次执行.(也就是说不会出现两个线程同时执行这段代码,所以是线性安全的!!!!!这个用在交通灯上面很好,但是,这个不应该是工业级的代码,这段代码不安全.因为如果系统突然出现问题,这个程序 会有时间差,如果是一个软件中的一个计时器控制一个十字路口的多个红绿灯就没有问题,但是如果这个软件有多个计时器,那么还是可能会在极端情况下,出现问题的,..老兄,你这代码不要真用于工作啊.罗嗦了,O(∩_∩)O)

你的系统每规定时间执行void timer1_Tick()这个方法

下面的文字乱糟糟的,你放在vs2012之类的编辑器中重新格式化一下

Graphics g =this.CreateGraphics();//创建图形
if (intTime!= 0) //这个变量是外部定义的
{
if(intTime < 10) //如果小于10 ,按照里面的代码说,是10 9 8 7 6 5这样减少,一直到0就停止,顺道再把 intTime 设置为5 ,搞不懂这样写代码的意义,可能代码外面还有其他作用吧
{
label1.Text = "0" + intTime.ToString();//将控件值弄为 09 06 04之类的值
label1.ForeColor = Color.Red;//并且label1的文字颜色变为红色 }
else
{
label1.Text = intTime.ToString();//否则就刷新0-9的值在label1空间商
label1.ForeColor = Color.Red;//颜色依然是红色
}
intTime--;//减去1,
intFalg= 1;//这是外部变量, 标志为1 (估计这个就是你说的交通灯切换信号,至于1是红色还是绿色,你调试程序的时候才知道啊)
getFillColor();//填充图形,这是外部方法
}
else //如果intTime ==0
{
label1.Text = "0" + intTime.ToString();//写成"00"
timer1.Enabled = false;//计时器停止工作/
intFalg= 0;//信号设置为0
intTime= 5;//同时将外部值intTime设置为5
timer1.Enabled = false;//当前计时器不可用 (也就是停止工作了)
timer3.Enabled = true;//另外一个计时器可用,是否立即执行,看这个的设置(timer3这个可以用了,但是是不是立即执行,是有一个设置的,在vs的编辑器里面,你找找属性,里面有一个规定,规定了timer是立即执行一次,然后循环,还是完全不执行等待系统调用,然后循环(这是两种工作模式))
}
全部回答
你好! 大概是使用Timer计时,画出绿灯的时候,绿灯的Timer开始,在Tick事件里将计数器自减,当计数器为0 就停止绿灯的Timer开启红灯的Timer,做同样的计数器自减,实现红灯,绿灯交替闪烁。 原理大概是这样,希望有帮到你 仅代表个人观点,不喜勿喷,谢谢。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
貔貅开光没有井水和泉水怎么办
买朋友的房子,不想通过中介办按揭,有哪些经
A “lost tribe” that reached America from
电影笑星姓曹的
谁有柠檬马鞭草的种子
九州早餐豆浆生活馆我想知道这个在什么地方
身份证号为522227200212224430的人
求《太空英雌芭芭丽娜》的免费下载或收看地址
条码为6901028180665的黄鹤楼多少钱一条?
同号两数相加,取________符号,并把绝对值__
邯郸矿院附近有修剃须刀的吗?飞科的。
求一篇关于我的梦想与父母的关系的作文
车先锋汽车快修养护中心地址有知道的么?有点
女朋友说因为怕失去后不习惯所以不敢太爱我
我的4.2米的货车现在副驾驶能带小孩子吗?
推荐资讯
植物大战僵尸灯谜大全太阳神僵尸的力量是谁赐
喝中药时可以喝决明子吗
vivoy913一打开wifi就显示“很抱歉,vivo服务
孩子学籍档案里的户籍所在地与户口本不一致怎
合肥坐过机场大巴的朋友们,请问:从合肥客运
三类大对数和五类大对数的区别
绿瘦荷叶茶喝了肚胀怎么办我己经喝了10天 、
中粮健康食品超市地址在什么地方,想过去办事
“穴”字下面一个“鼠”,是什么字?怎么读?
感觉很喜欢一个人,也爱过,很久不见会想念,
一个男人抛弃了,死心塌地对他好,付出了一切
女人得乳头瘤病毒会传染给男人吗会传染的几率
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?