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提到的,你可以用定时器来完成。