WPF Label的Content实时刷新

翟光 2017-03-09 05:17:29
在代码中定义了一个 DispatcherTimer,对其的Tick事件进行绑定,是WPF控件Label每个1秒钟刷新一下显示的文字,实质上就是一个计时的程序。代码如下:

private void Timer_Tick(object sender, EventArgs e)
{
DateTime currnetDateTime = DateTime.Now;
TimeSpan timeSpan = currnetDateTime - startDateTime;//startDateTime是一个全局变量,已定义
string content = timeSpan.Hours.ToString("D2") + ":" + timeSpan.Minutes.ToString("D2") + ":" +
timeSpan.Seconds.ToString("D2") + "." + (timeSpan.Milliseconds / 1000.0d);
TimeLabel.Content = content;
}


WPF的控件中没有Refresh() 方法,在网上搜了一个如下的扩展方法:

public static class ExtensionMethods
{
private static Action EmptyDelegate = delegate ()
{ };

public static void Refresh(this UIElement uiElement)
{
uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
}
}

private void Timer_Tick(object sender, EventArgs e)
{
DateTime currnetDateTime = DateTime.Now;
TimeSpan timeSpan = currnetDateTime - startDateTime;//startDateTime是一个全局变量,已定义
string content = timeSpan.Hours.ToString("D2") + ":" + timeSpan.Minutes.ToString("D2") + ":" +
timeSpan.Seconds.ToString("D2") + "." + (timeSpan.Milliseconds / 1000.0d);
TimeLabel.Content = content;
TimeLabel.Refresh();
}

依旧无法做到实时更新,请问应当怎么做?
...全文
1181 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
翟光 2017-03-10
  • 打赏
  • 举报
回复
引用 6 楼 u011785544 的回复:
完全不懂你写的是什么里根冷 做计时 就启动计时器 计时器设置1秒触发一次tick 在tick的实现中获取当前的时间 转成字符串 赋值给Label的Content就完了呗
赋值了不显示,这是根本问题
Veary 2017-03-10
  • 打赏
  • 举报
回复
完全不懂你写的是什么里根冷 做计时 就启动计时器 计时器设置1秒触发一次tick 在tick的实现中获取当前的时间 转成字符串 赋值给Label的Content就完了呗
翟光 2017-03-10
  • 打赏
  • 举报
回复
引用 4 楼 Forty2 的回复:
Label.Content是依赖属性,不需要另行通知更新。 你碰到的问题, 可能是Timer没有启动, 或更新到其他Label上, 或Label.Content被一个动画给定死了。
我是在另一个窗体中调用这个label所在的窗体进行显示的,待主线程完毕之后label上能够正确显示文字,请问我是需要把label所在的窗体放到一个新的线程中吗?
Forty2 2017-03-10
  • 打赏
  • 举报
回复
Label.Content是依赖属性,不需要另行通知更新。 你碰到的问题, 可能是Timer没有启动, 或更新到其他Label上, 或Label.Content被一个动画给定死了。
xuggzu 2017-03-09
  • 打赏
  • 举报
回复
不显示查查其它原因,dsptchertimer的tick事件中显示界面文字无需特殊处理,何况是1秒刷一次。
翟光 2017-03-09
  • 打赏
  • 举报
回复
不refresh无法显示
xuggzu 2017-03-09
  • 打赏
  • 举报
回复
timerlable.content=content就可以了,有必要refresh吗?
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

110,556

社区成员

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

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

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