C# WPF控件未正确刷新

C# WPF控件未正确刷新,c#,wpf,C#,Wpf,我对正常文本块的刷新有问题。我的代码如下: public Window1() { InitializeComponent(); Thread newt = new Thread(Tick); newt.Start(); } void Tick() { while (true) { textBlock1.Dispatcher.Invoke(

我对正常文本块的刷新有问题。我的代码如下:

    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
重新激活监视器时,我注意到该值每秒更新一次,但是由于小时现在没有十的单位,它是左对齐的,并且该单位在
12:55:55
秒数的位置没有刷新

因此,它将值显示为:
1:02:555
。最后5个是监视器进入睡眠前的
12:55:55

控件只有在最小化和最大化窗口后才会刷新,在这种情况下,它会正确地显示刷新的时间


这是NVidia FX 1800的显示器驱动程序问题。有人遇到过相同的问题吗?

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

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

尝试使用textBox.InvalidateVisual()。它强制文本框重新加载。但是它会对性能产生影响,因为控件应该非常准确地知道应该重新查找哪个部分

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

您正在将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);
    }
}

不…无效的通常没有效果!:(不..InValidateVisual没有效果!:(我使用了DispatcherPriority.ApplicationIdle。它也没有帮助。我使用了DispatcherPriority.ApplicationIdle。它也没有帮助。