WPF控件未正确刷新
本文关键字:刷新 控件 WPF | 更新日期: 2023-09-27 17:59:22
我在刷新普通文本块时遇到问题。我的代码如下:
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);
}
));
}
}
应用程序运行时,监视器在12:55:55
进入睡眠模式。当我在1:02
重新激活监视器时,我注意到该值每秒都会更新,但由于小时现在没有10的单位,它被左对齐,12:55:55
的秒的单位位置也不会刷新。
因此,它将值显示为:1:02:555
。最后5个来自监视器进入睡眠状态之前的12:55:55
。
只有在最小化和最大化窗口后,控件才会刷新,在这种情况下,它会显示正确刷新的时间。
这是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);
}
}