如何解决WPF控制未正确刷新
| 我在正常文本块的刷新方面遇到问题。我的代码如下: public Window1()
{
InitializeComponent();
Thread newt = new Thread(Tick);
newt.Start();
}
void Tick()
{
while (true)
{
textBlock1.Dispatcher.Invoke(
DispatcherPriority.Normal,new Action(
delegate()
{
textBlock1.Text = DateTime.Now.ToString(\"h:mm:ss\");
Thread.Sleep(1000);
}
));
}
}
随着应用程序的运行,监视器以at1ѭ进入睡眠模式。当我在1:02
处重新激活监视器时,我注意到该值每秒都会更新,但是由于小时现在没有十进制单位,因此它保持对齐,并且refresh1的秒数所在单位的位置没有刷新。
因此,它将值显示为:1:02:555
。最后5个是监视器进入睡眠状态之前的ѭ1。
只有在我最小化和最大化窗口后,控件才会刷新,在这种情况下,它会显示正确正确刷新的时间。
NVidia FX 1800是一个显示驱动程序问题。有人遇到过同样的问题吗?
解决方法
将调度程序的优先级设置为较低的优先级,这将确保刷新您的文本框。
, 尝试使用textBox.InvalidateVisual()。它强制文本框重新呈现。但是这会对性能产生影响,因为控件应该非常准确地知道自己应该重新渲染什么部分
, 您要在返回之前将UI线程睡眠1秒钟。您不应该使UI线程进入休眠状态。我相信您打算让后台线程休眠1秒钟,如果是这样,则您需要执行以下操作:
void Tick()
{
while (true)
{
textBlock1.Dispatcher.Invoke(
DispatcherPriority.Normal,new Action(
delegate()
{
textBlock1.Text = DateTime.Now.ToString(\"h:mm:ss\");
}
));
// Executed on background thread,not UI thread
Thread.Sleep(1000);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。