C#培训2019-10-25 关于延时与Timer的问题 (改变控件颜色后,让其保持这个颜色一段时间,而实际运行颜色根本没有变)
2020-02-02 09:07
579 查看
解决了,其实颜色是变了,因为属性值变了,需要强制让那个空间刷新,而不是Form刷新。
问题一、颜色改变问题:若想达到题目的目的,第一反应是将控件颜色改变,然后下一行就写延时,延时完做其它的动作。
如:
void Move(){ //移动一段距离 if(//到达边界条件){ //亮灯 panel.BackColor = Color.Yellow; //延时一段时间 Thread.Sleep(300); //执行其余动作 } }但是实际上,这样执行的时候,发现虽然
panel.BackColor的值是改变了,但是在执行
Thread.Sleep(300)期间,UI的显示上,根本没有控件颜色的改变。也就是说出现了:
明明我改变了控件颜色呀,但是为什么显示上它却不变呢???
问题二、Timer问题:Timer的Enable属性并不是一打开就会开始计时,而是当执行timer1.Enable = true
这一行代码的方法执行结束后,才会开始执行触发。
问题一和二的答案是一致的:C#的作业系统,规定了一定要这行代码所在的方法执行结束以后,才会去实际做这个事情。
也就说,我们完全可以用别的方法来完成这件事情,来避开这个。
问题一解决方案:
首先有一个移动一次的方法,方法内同时会对亮灯进行判断以及到了边界改变方向。
void MoveOneTime() { for( int i = 0; i < m_PositionRodGroup.Length; i++ ) { m_PositionRodGroup[ i ].Location = new Point( m_PositionRodGroup[ i ].Location.X, m_PositionRodGroup[ i ].Location.Y + m_EachMoveDistance ); } // check light on/off if( m_PositionRodGroup[ 0 ].Location.Y == m_CylinderLocation.Y - 120 ) { EventCenter.LihtOn( true, LightPosition.DOWN ); isStartSleep = true; return; } else if( m_PositionRodGroup[ 0 ].Location.Y == m_CylinderLocation.Y - 30 ) { EventCenter.LihtOn( true, LightPosition.UP ); m_EachMoveDistance = -1; //m_tmr1.Enabled = false; } else { EventCenter.LihtOn( false, LightPosition.DOWN ); } }
然后让Timer挂载的方法来触发
MoveOneTime,而延时的方法则写在
m_tmr1_Tick中,通过一个bool的
isStartSleep字段来控制是否延时。
void m_tmr1_Tick( object sender, EventArgs e ) { if( isStartSleep ) { System.Threading.Thread.Sleep( m_nStandingTime * 500 ); m_EachMoveDistance = 1; isStartSleep = false; } MoveOneTime(); }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- c# 关于string与控件id的转换问题(个人笔记)
- C#中关于timer的简单问题
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- IDE-----VS2005运行过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的解决
- 【转】C# TabConTrol控件背景颜色问题
- 关于C#timer 时间精确度的问题
- C# timer控件的问题
- 郁闷了半天,原来是这个问题:关于C#中关于图片保存到数据库以及将数据库中的图片显示到PictureBox。
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- Android7.0关于PopWindow的问题Android7.0 PopupWindow的兼容问题 Android7.0 中对 PopupWindow 这个常用的控件又做了一些改动,修复了以前
- Android Studio 中的类文件前标识图标显示为 j 而不是C,代码的左边没有了颜色显示,布局文件的引用也没有蓝色显示,代码大部分变成了白色。项目能正常编译运行,且敲代码时也没有了提示的问题
- 改变控件颜色问题
- 请求高人帮我看下代码,编译没有错,运行出问题 关于简单文本编辑器的
- C#关于自带滚动条控件的滚动条跳动问题
- C#关于自带滚动条控件的滚动条跳动问题
- C# TabConTrol控件背景颜色问题
- 关于WIN7下STCISP因MSCOMM32.OCX控件问题无法运行及解决方法
- 关于C#timer 时间精确度的问题
- C#控件改变大小时闪烁问题
- C#编写winForm,在不同分辨率,不同系统电脑上运行,控件位置错位问题