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。它也没有帮助。