我有一个小应用程序,它读取管道分隔文件并将行写入 RTB,突出显示某些“列”中是否存在不允许的字符。这工作得很好……但是,用户想要一个进度条,并看到“实时”写入的行,并且能够中途取消。
我有以下扩展方法,我一直用它来写入 RichTextBox,同时阻止 UI,但是使用带有 BeginInvoke 的 BackgroundWorker 会失败。
失败是在找到文本的当前长度时。
public static void AppendLine(this RichTextBox richTextBox, string text, List<Char> foundChars, List<int> columns)
{
var split = text.Trim().Split(new char[] { '|' });
for (int i = 0; i < split.Count(); i++)
{
**var start = richTextBox.TextLength;**
richTextBox.AppendText(split[i]);
var end = richTextBox.TextLength;
if (columns.Contains(i + 1))
{
foreach (var foundChar in foundChars)
{
var current = start;
while (current > 0)
{
var position = richTextBox.Find(new char[] { foundChar }, current, end);
current = position + 1;
if (current > 0)
{
richTextBox.Select(position, 1);
richTextBox.SelectionColor = Color.Red;
}
}
}
}
richTextBox.SelectionLength = 0;
richTextBox.SelectionColor = Color.Black;
}
richTextBox.AppendLine();
}
private void UpdateResultsLine(string line, List<char> foundChars)
{
if (txtResults.InvokeRequired)
{
txtResults.BeginInvoke(new UpdateResultsLineDelegate(UpdateResultsLine), line, foundChars);
}
txtResults.AppendLine(line, foundChars, _fileType.ProcessColumns);
}
但是,如果我以相同的方式调用任何/所有这些扩展,它们会起作用吗?
public static void AppendLine(this RichTextBox richTextBox)
{
richTextBox.AppendText(Environment.NewLine);
}
public static void AppendLine(this RichTextBox richTextBox, string text)
{
richTextBox.AppendText(text + Environment.NewLine);
}
public static void AppendLine(this RichTextBox richTextBox, string text, params object[] args)
{
richTextBox.AppendLine(string.Format(text, args));
}
我缺少什么?或者是否有其他方法将彩色文本写入 RTB?