请看附件里面是1个100多K的起点小说,TXT文档,我想弄个txt阅读器,放了个richTextBox,最快的办法就是
richTextBox1.LoadFile(fileName, RichTextBoxStreamType.PlainText);
但是此法读取小说发现没有换行,无法阅读.
结果就想用流的方式.
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                if (fs.CanRead)
                {
                    //读取时加入编码信息,否则读取汉字会乱码
                    StreamReader sr = new StreamReader(fs, Encoding.Default);
                    //毛病是没有换行
                    //richTextBox1.Text = sr.ReadToEnd();
                    string strline = sr.ReadLine();
                    while (strline != null)
                    {
                        strline = sr.ReadLine();
                        richTextBox1.Text += strline + "\n";
                    }
                    sr.Close();发现速度奇慢无比.结果又用上异步读取,发现还是会造成程序无响应,附上程序源码请各位大大指点指点.如何快速读取大的txt和解决无响应问题?

解决方案 »

  1.   

    我怎么觉得 慢是因为richTextBox1.Text   +=   strline   +   "\n"; 
    你先用StringBuilderBuild一个string
    然后一起赋给richTextBox1
      

  2.   

    看了上面的代码,如果文本行数多的情况下,会比较耗资源,而且对GC也会带来负担,以下是改进代码。FileStream   fs   =   new   FileStream(fileName,   FileMode.Open,   FileAccess.Read);
                                    if   (fs.CanRead)
                                    {
                                            //读取时加入编码信息,否则读取汉字会乱码
                                            StreamReader   sr   =   new   StreamReader(fs,   Encoding.Default);
                                            //毛病是没有换行
                                            //richTextBox1.Text   =   sr.ReadToEnd();
                                            string   strline   =   sr.ReadLine();
                                            StringBuilder sb = new StringBuilder();
                                            sb.Append(strline);
                                            while   (strline   !=   null)
                                            {
                                                    strline   =   sr.ReadLine();
                                                    sb.Append("\n");
                                                    sb.Append(strline);                                                
                                            }
                                            sr.Close(); 
                                            richTextBox1.Text =sb.ToString(0,sb.Length);
      

  3.   

    多谢  zhzuo 
    使用StringBuilder 我原来也弄过,只不过是在循环里面  sb.Append(strline); 
    不知道最后那句richTextBox1.Text   =sb.ToString(0,sb.Length);
    多谢多谢指教了