【发布时间】:2020-03-20 13:13:33
【问题描述】:
此程序将文件打开到文本框中。它适用于大小为 4KB 的小文件,但我在处理 200KB 的文件时遇到了问题。理想情况下,我希望能够打开任何大小的文件,但是将大文件打开到文本框中会冻结程序。我做错了什么?
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamReader sr = new StreamReader(openFileDialog1.FileName);
Text = openFileDialog1.FileName + " - " + "Fixprt";
textBox1.Text = String.Empty;
while (!sr.EndOfStream)
{
textBox1.Text += sr.ReadLine() + Environment.NewLine;
}
sr.Close();
}
openFileDialog1.Dispose();
}
【问题讨论】:
-
为什么不一次全部加载呢?例如:
textbox1.Text = File.ReadAllText(openFileDialog1.FileName);或者你可以读取所有行,string[] lines = System.IO.File.ReadAllLines(openFileDialog1.FileName);然后使用lines做你想做的事。 -
无论文件大小如何都会冻结程序
-
在循环中连接字符串是个坏主意,至少你应该使用 StringBuilder。还有为什么不让它异步。
-
@cd5ssmffan 这是标准行为,当您在 UI 上加载这些数据时会发生什么?其中一个问题是,实际的 Text 属性会在幕后进行检查以确定新值是否与当前值不同......当这样做时,可能数千次,它是一个问题;做一次,不要冲洗并重复。
标签: c# memory textbox streamreader