C# 窗体上 Label控件 实时刷新 显示当前时间

lht8005362388 2012-12-23 07:52:25
我用了

while (true)
{
label.Text = DateTime.Now.Second.ToString();
}

可是程序就停止响应 请问高手怎么办才好

...全文
15507 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
姓小名白丶 2014-11-30
  • 打赏
  • 举报
回复
楼主是死循环吧,可以考虑用多线程试试,timer空间其实也是多线程,类似于网站的局部刷新吧
SmileSkyNet 2014-11-30
  • 打赏
  • 举报
回复
Timer控件就是多线程
gwlbjfu 2014-11-27
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
while (true)             {                 label.Text = DateTime.Now.Second.ToString(); Application.DoEvents(); System.Threading.Thread.Sleep(100);             }
特意登上号来感谢一下你。我纠结了很久,不知道如何让当空间的Text值有变化的时候,窗体上的空间实时刷新。 大恩不言谢! 我想了好久好久了!
yaojunyi3725 2014-11-12
  • 打赏
  • 举报
回复
timer是最正宗的办法 注意有两个不同命名空间下的timer
我现在在路上 2014-11-12
  • 打赏
  • 举报
回复
引用 32 楼 q644415569 的回复:
2012年的帖子 也挖
我擦。。。是啊,为什么会显示在首页。。
我现在在路上 2014-11-12
  • 打赏
  • 举报
回复
引用 26 楼 Z65443344 的回复:
线程里可以操作UI控件,加个语句 //去掉非线程之间创建控件的错误 CheckForIllegalCrossThreadCalls = false; 就行了
你在误导他。。线程安全也要知道点的。。
以夕阳落款 2014-11-12
  • 打赏
  • 举报
回复
用Ajax和timer刷新应该是最好的
风的传人 2014-11-12
  • 打赏
  • 举报
回复
可以考虑用js吧?///显示时间 function showTime() { var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; var date = now.getDate(); var hours = now.getHours(); var mins = now.getMinutes(); var secs = now.getSeconds(); var dateVal = ""; var timeVal = ""; 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); }
爱生活爱先鸟 2014-11-12
  • 打赏
  • 举报
回复
用时间空间啊。
  • 打赏
  • 举报
回复
            new Thread(() => {
                while (true) {
                    this.Invoke(new MethodInvoker(() => this.Text = DateTime.Now.ToString()));
                    Thread.Sleep(1000);
                }
            }).Start();
开条线程去跑
KJ_Wang 2014-11-11
  • 打赏
  • 举报
回复
好象所有方法都用了,我没话可说!
yalunwang123 2014-11-11
  • 打赏
  • 举报
回复
为什么我在asp.net里面用Ajax里面用timer实现显示时间时,刚打开要等1秒才开始显示时间啊
蜗牛慢慢趴 2014-11-10
  • 打赏
  • 举报
回复
2012年的帖子 也挖
霜之咏叹调 2014-11-10
  • 打赏
  • 举报
回复
需要在UI线程中启动一个新线程 然后新线程中异步刷新就可以了 http://www.cnblogs.com/chucklu/p/4087469.html
Peter石 2014-07-11
  • 打赏
  • 举报
回复
Label显示消息在少量的时候适合,我最近也在做一些上位机的东西,面对众多label串口都已经关闭了页面还在刷新。 由于我们只是要显示一句话或者一个值,而Label本身封装了很多属性在里面,而且具体是什么也不甚了解。那么简单原则,自己写一个Control来替代label即可。 我是这样解决的

public sealed partial class SuperLabel : Control
    {
        public SuperLabel()
        {
            this.DoubleBuffered = true;
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            if (this.DesignMode)
            {
                base.OnPaintBackground(e);
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);
            Refresh();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            StringFormat format = new StringFormat {LineAlignment = StringAlignment.Center};
            e.Graphics.FillRectangle(new SolidBrush(BackColor), this.ClientRectangle);
            e.Graphics.DrawString(this.Text, this.Font,new SolidBrush(ForeColor), this.ClientRectangle, format);
        }
    }
yls0221 2014-04-22
  • 打赏
  • 举报
回复
於黾 2014-04-21
  • 打赏
  • 举报
回复
主线程里出现死循环当然会停止响应 再开个线程就行了啊. 而且有必要一直实时显示么,反正显示的再快人眼也看不清
消极怠工 2014-04-21
  • 打赏
  • 举报
回复
你这是死循环的啊 用timer 吧 网上随便找个例子
u013052673 2014-04-21
  • 打赏
  • 举报
回复
顶起,一般用timer吧
wind_cloud2011 2014-04-21
  • 打赏
  • 举报
回复
private void timer1_Tick(object sender, EventArgs e) { label1.Text = DateTime.Now.ToString("HH:mm:ss"); }
加载更多回复(24)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧