C# 在wpf C中运行时更改标签文本#
我有一个标签名为C# 在wpf C中运行时更改标签文本#,c#,wpf,label,wpf-controls,C#,Wpf,Label,Wpf Controls,我有一个标签名为lblMsg 我想动态更改它的内容运行时 下面是我的代码示例,而不是实际代码。我的for循环包含很多代码,每个循环大约需要8到9秒。所以它应该在UI上可见 例如 for(int i=0;i<=length;i++) { lblMsg.Content="Test"+i; } for(int i=0;i如果您只想显示一个带有递增数字的标签,您可以创建一个任务,然后使用延迟(Thread.Sleep())为UI提供刷新标签的时间 由于不能在单独的线程中更改UI元素,因此
lblMsg
我想动态更改它的内容运行时
下面是我的代码示例,而不是实际代码。我的for循环包含很多代码,每个循环大约需要8到9秒。所以它应该在UI上可见
例如
for(int i=0;i<=length;i++)
{
lblMsg.Content="Test"+i;
}
for(int i=0;i如果您只想显示一个带有递增数字的标签,您可以创建一个任务,然后使用延迟(Thread.Sleep())为UI提供刷新标签的时间
由于不能在单独的线程中更改UI元素,因此必须使用UI调度程序更新UI
示例代码
var length = 1000;
Task.Run(() =>
{
for (int i = 0; i <= length; i++)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
lblMsg.Content = "Test" + i;
}), DispatcherPriority.Render);
Thread.Sleep(100);
}
});
var长度=1000;
Task.Run(()=>
{
对于(int i=0;i{
lblMsg.Content=“Test”+i;
}),DispatcherPriority.Render);
睡眠(100);
}
});
For循环立即工作。如果你想看到它更新的时间开始添加一个计时器,并把i++的计时器滴答滴答它可能会更新,但它走得太快,你注意不到(可能不到一毫秒)。立即?一毫秒?据我们所知,length=int.MaxValue
。UIs会讨厌这一点,如果Telerik也参与进来……最好退出战争Peace@MickyD就像我说的两次,可能。不一定。上面的代码只是一个exmaple。我的实际代码需要时间来执行。。每台大约8-9秒。我的标签应该相应地改变。任务1在第一个循环中完成,任务2在第二个循环中完成,等等。通过消息泵进行线程间编组的成本很高。为什么不使用计时器呢?这样,如果没有dispatcher,我就无法在运行时更新标签?@Ripal您可以,但您必须给UI一些时间刷新。正如MickyD提到的,你可以用定时器来完成。