问题描述
我用了while(true){label.Text=DateTime.Now.Second.ToString();}
可是程序就停止响应请问高手怎么办才好
解决方案
解决方案二:
怎么能让他不停地更新而且我还能进行其他操作,如果叫我就timer就不用了
解决方案三:
while (true) { label.Text = DateTime.Now.Second.ToString();Application.DoEvents();System.Threading.Thread.Sleep(100); }
解决方案四:
引用2楼caozhy的回复:
while(true){label.Text=DateTime.Now.Second.ToString();Application.DoEvents();System.Threading.Thread.Sleep(100);}
-------------------------------正解
解决方案五:
除了2楼版主的方式还可以使用Time定时器来完成1、定义Time定时器的轮询间隔2、在Time定时器的事件中写给Label赋当前时间的代码
解决方案六:
引用2楼caozhy的回复:
while(true){label.Text=DateTime.Now.Second.ToString();Application.DoEvents();System.Threading.Thread.Sleep(100);……
可以用多线程的方法做吗请帮忙??????!!!!
解决方案七:
楼主,死循环的代码是很容易出现内存溢出的
解决方案八:
引用6楼lyq8376的回复:
楼主,死循环的代码是很容易出现内存溢出的
比如这个不用死循环用什么帮帮忙
解决方案九:
引用7楼lht8005362388的回复:
引用6楼lyq8376的回复:楼主,死循环的代码是很容易出现内存溢出的比如这个不用死循环用什么帮帮忙
那你就采用4楼的timer的方法吧。思路已经提供给你了
解决方案十:
load事件里面下this.timer1.Interval=1000;this.timer1.Start();timer1_Tick事件下写label.Text=DateTime.Now.Second.ToString();Application.DoEvents();
解决方案十一:
都是不是我想要的我想要用多线程的方法但是不知道怎么做
解决方案十二:
引用2楼caozhy的回复:
while(true){label.Text=DateTime.Now.Second.ToString();Application.DoEvents();System.Threading.Thread.Sleep(100);……
正解。
解决方案十三:
如果不用timer,写成后台线程,线消息更新就可以了。麻烦点,但彻底。
解决方案十四:
还是么有用解决
解决方案十五:
publicvoidStartShowTime(){ThreadthreadShowTime=newThread(newThreadStart(()=>{label1.BeginInvoke(newMethodInvoker(()=>label1.Text=DateTime.Now.ToString()))Thread.Sleep(1000);}));threadShowTime.IsBackground=true;threadShowTime.Start();}
直接手打的不知道对不对反正思路就这个样
其他方案:
publicvoidStartShowTime(){ThreadthreadShowTime=newThread(newThreadStart(()=>{while(true){label1.BeginInvoke(newMethodInvoker(()=>label1.Text=DateTime.Now.ToString()))Thread.Sleep(1000);}}));threadShowTime.IsBackground=true;threadShowTime.Start();}
上面的貌似少了一个循环
其他方案:
bool_isClosed=false;voidCreateThread(){Threadthread=newThread(newThreadStart(TimeProc));thread.Start();}voidTimeProc(){while(!_isClosed){label1.BeginInvoke(newMethodInvoker(()=>label1.Text=DateTime.Now.ToString()))Thread.Sleep(1000);}}
其他方案:
break;
其他方案:
表示用js轻松搞定~functionClock(){vardate=newDate();this.year=date.getFullYear();this.month=date.getMonth()+1;this.date=date.getDate();this.day=newArray("星期日","星期一","星期二","星期三","星期四","星期五","星期六")[date.getDay()];this.hour=date.getHours()<10?"0"+date.getHours():date.getHours();this.minute=date.getMinutes()<10?"0"+date.getMinutes():date.getMinutes();this.second=date.getSeconds()<10?"0"+date.getSeconds():date.getSeconds();this.toString=function(){return"现在是:"+this.year+"年"+this.month+"月"+this.date+"日"+this.hour+":"+this.minute+":"+this.second+""+this.day;};this.toSimpleDate=function(){returnthis.year+"-"+this.month+"-"+this.date;};this.toDetailDate=function(){returnthis.year+"-"+this.month+"-"+this.date+""+this.hour+":"+this.minute+":"+this.second;};this.display=function(ele){varclock=newClock();ele.innerHTML=clock.toString();window.setTimeout(function(){clock.display(ele);},1000);};}
其他方案:
参考这个http://blog.csdn.net/isbnhao/article/details/7914840
其他方案:
privatevoidtimer1_Tick(objectsender,EventArgse){label1.Text=DateTime.Now.ToString("HH:mm:ss");}
其他方案:
顶起,一般用timer吧
其他方案:
你这是死循环的啊用timer吧网上随便找个例子
其他方案:
主线程里出现死循环当然会停止响应再开个线程就行了啊.而且有必要一直实时显示么,反正显示的再快人眼也看不清
其他方案:
.Net封装的各种Timer本来就是专门做这事的,你又偏偏说算了,那还是算了吧
其他方案:
timer最优,否则就是新线程里while(true),sleep,但子线程里操作不了UI控件,要用个代理。
其他方案:
线程里可以操作UI控件,加个语句//去掉非线程之间创建控件的错误CheckForIllegalCrossThreadCalls=false;就行了
其他方案:
1、Timer是最好的2、开子线程Sleep(1000),不过要使用委托3、Application.DoEvent()这个不解析
其他方案:
引用21楼u013052673的回复:
顶起,一般用timer吧
网上有很多例子的
其他方案:
其他方案:
Label显示消息在少量的时候适合,我最近也在做一些上位机的东西,面对众多label串口都已经关闭了页面还在刷新。由于我们只是要显示一句话或者一个值,而Label本身封装了很多属性在里面,而且具体是什么也不甚了解。那么简单原则,自己写一个Control来替代label即可。我是这样解决的publicsealedpartialclassSuperLabel:Control{publicSuperLabel(){this.DoubleBuffered=true;}protectedoverridevoidOnPaintBackground(PaintEventArgse){if(this.DesignMode){base.OnPaintBackground(e);}}protectedoverridevoidOnTextChanged(EventArgse){base.OnTextChanged(e);Refresh();}protectedoverridevoidOnPaint(PaintEventArgse){base.OnPaint(e);StringFormatformat=newStringFormat{LineAlignment=StringAlignment.Center};e.Graphics.FillRectangle(newSolidBrush(BackColor),this.ClientRectangle);e.Graphics.DrawString(this.Text,this.Font,newSolidBrush(ForeColor),this.ClientRectangle,format);}}
其他方案:
需要在UI线程中启动一个新线程然后新线程中异步刷新就可以了http://www.cnblogs.com/chucklu/p/4087469.html
其他方案:
2012年的帖子也挖
其他方案:
其他方案:
好象所有方法都用了,我没话可说!
其他方案:
newThread(()=>{while(true){this.Invoke(newMethodInvoker(()=>this.Text=DateTime.Now.ToString()));Thread.Sleep(1000);}}).Start();
开条线程去跑
其他方案:
为什么我在asp.net里面用Ajax里面用timer实现显示时间时,刚打开要等1秒才开始显示时间啊
其他方案:
用Ajax和timer刷新应该是最好的
其他方案:
引用26楼Z65443344的回复:
线程里可以操作UI控件,加个语句//去掉非线程之间创建控件的错误CheckForIllegalCrossThreadCalls=false;就行了
你在误导他。。线程安全也要知道点的。。
其他方案:
引用32楼q644415569的回复:
2012年的帖子也挖
我擦。。。是啊,为什么会显示在首页。。
其他方案:
timer是最正宗的办法注意有两个不同命名空间下的timer
其他方案:
用时间空间啊。
其他方案:
可以考虑用js吧?///显示时间functionshowTime(){varnow=newDate();varyear=now.getFullYear();varmonth=now.getMonth()+1;vardate=now.getDate();varhours=now.getHours();varmins=now.getMinutes();varsecs=now.getSeconds();vardateVal="";vartimeVal="";dateVal+=year;dateVal+="-";dateVal+=month;dateVal+="-"dateVal+=date;timeVal+=hours;timeVal+=((mins<10)?":0":":")+mins;timeVal+=((secs<=10)?":0":":")+secs;document.all.face.innerHTML="日期:"+dateVal+"<br/>时间:"+timeVal;//document.all.face.innerHTML="时间:"+timeVal;timerID=setTimeout("showTime()",1000);}
其他方案:
引用2楼caozhy的回复:
while (true) { label.Text = DateTime.Now.Second.ToString();Application.DoEvents();System.Threading.Thread.Sleep(100); }
特意登上号来感谢一下你。我纠结了很久,不知道如何让当空间的Text值有变化的时候,窗体上的空间实时刷新。大恩不言谢!我想了好久好久了!
其他方案:
Timer控件就是多线程
其他方案:
楼主是死循环吧,可以考虑用多线程试试,timer空间其实也是多线程,类似于网站的局部刷新吧