我正在将大型 Txt 文档读入 WPF 应用程序,以进行一些严重的交换/替换操作。这些文件实际上是 3D STP 模型,因此它们相当大,但我将它们作为该项目的原始文本使用。这些文件被读入 List 以避免必须多次打开它们,并使比较更容易。
无论如何,我试图让列表框在添加行时动态滚动,例如控制台窗口,以便用户可以看到正在发生的事情,因为计算可能需要一些时间,具体取决于文件大小。我还添加了一个进度条,以便在读取总行号时进行计数。
不过,我的进度条和 ListBox 似乎都不会随着工作的进行而更新。最终输出简单地落在完成的列表框中,进度条同时从 0-max 开始。
这是我正在做的事情的要点,这很简单:
foreach (string Line in OriginalSTPFile.Lines)
{
string NewLine = EvaluateString(Line); //string the modified to whatever here
pBar.Value++; //increment progressbar
OutputWindow.Items.Add(NewLine); //add line to the ListBox
}
我只希望列表框一个进度条随着进度的变化而实时更新。我尝试使用:
Dispatcher.BeginInvoke(new Action(() => OutputWindow.Items.Add(NewLine));
但得到了相同的结果。我需要更精细的多线程方法吗?我认为第一种方法会起作用,因为我也没有生成任何跨线程异常。