【发布时间】:2015-07-03 22:05:00
【问题描述】:
我需要将一个 10MB 范围的文本文件加载到 Winform RichTextBox 中,但我当前的代码正在冻结 UI。我尝试让后台工作人员进行加载,但这似乎也不太好。
这是我尝试过的几个加载代码。有什么方法可以提高它的性能吗?谢谢。
private BackgroundWorker bw1;
private string[] lines;
Action showMethod;
private void button1_Click(object sender, EventArgs e)
{
bw1 = new BackgroundWorker();
bw1.DoWork += new DoWorkEventHandler(bw_DoWork);
bw1.RunWorkerCompleted += bw_RunWorkerCompleted;
string path = @"F:\DXHyperlink\Book.txt";
if (File.Exists(path))
{
string readText = File.ReadAllText(path);
lines = readText.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
bw1.RunWorkerAsync();
}
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
Invoke((ThreadStart)delegate()
{
for (int i = 0; i < lines.Length; i++)
{
richEditControl1.Text += lines[i] + "\n";
}
});
}
我也试试:
Action showMethod = delegate()
{
for (int i = 0; i < lines.Length; i++)
{
richEditControl1.Text += lines[i] + "\n";
}
};
【问题讨论】:
-
为什么要逐行添加文本???这势必比在一个命令中设置 Text 或 Rtf 慢 LOT!
-
因为我想专门在每一行上创建超链接。
-
至少使用 AppendText 而不是连接到 previuos Text。
-
这是一个崇高的事业(即使你隐藏得很好,我仍然看不到你这样做)但没有理由这样做。在将其添加到 RTB 之前准备好一切!为了准备,请使用 StringBuilder!!
-
重新考虑您的用户界面。没有人可以使用 TextBox 中的 10 MB 文本。围绕某人想要完成的内容重新设计您的 UI。
标签: c# winforms richtextbox backgroundworker