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的显示器驱动程序问题。有人遇到过同样的问题吗?

WPF控件未正确刷新

将调度程序优先级设置为较低的优先级,这将确保刷新文本框。

尝试使用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);
    }
}