如何在循环中立即添加文本到TextBlock

本文关键字:添加 文本 TextBlock 循环 | 更新日期: 2023-09-27 18:17:53

我是新WPF。

我正试图在我的WPF应用程序中打印一些信息。我写了一个简单的方法,将文本附加到TextBlock称为tbLog,我想把它像控制台输出一样使用。

private void WriteLn(string text)
{
    tbLog.Text += text + Environment.NewLine; // tbLog is a TextBlock
}

现在我试着在循环中使用它。

foreach (var day in listOfDays)
{
    Stopwatch watch = new Stopwatch();
    watch.Start();
    double[] aData = GetDayData(data, day); // I'm using EF6 DbContext here
    alData.Add(aData); 
    WriteLn("Processing " + day.Date.Date + " took " + watch.Elapsed.TotalSeconds + "s");
}

WriteLn()的效果不立即可见(每次循环运行后)。所有打印的数据显示后,整个循环结束。我怎样才能解决这个问题呢?

我在循环中使用的GetDayData()方法使用实体框架6 DbContext

如何在循环中立即添加文本到TextBlock

所以,感谢Evk,我像这样修复了我的代码:

"WriteLn"部分:

private void WriteLn(string text)
{
    tbLog.Dispatcher.BeginInvoke(new Action(() =>
    {
        tbLog.Text += text + Environment.NewLine;
    }));
}

循环部分:

Thread t = new Thread(() => 
        {
            foreach (var day in listOfDays)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
                double[] aData = GetDayData(data, day);
                alData.Add(aData);
                WriteLn("Processing " + day.Date.Date + " took " + watch.Elapsed.TotalSeconds + "s");
                id++;
            }
        });
t.Start();