将大文本文件加载到richtextbox中;对文本框滚动做出反应

时间:2011-08-19 00:44:54

标签: .net winforms richtextbox

我正在考虑以某种方式加载文本文件(6MB),因此每次用户向下滚动时,都会将文本文件的下一部分加载到richtextbox中。

我不知道如何检查用户是否以及何时向下滚动以及他向下滚动了多少,然后再从文本文件加载到richtextbox的数量。

此外,我希望每次用户向下滚动并加载下一部分时,进度条将显示百分比。因此,用户将知道上传文本的下一部分需要多长时间。

也许还有另一种解决方法。我想要最好的方法将6mb文本文件加载到richtextbox最好的方式,我的意思是最快的方式。或者如果不是那么快,那么现在效果不佳的进度条将显示剩余的数量。

我之前在那里使用了一个计数器来检查他是否>= 200 then break; 我现在不需要它,我想解决一些大文件加载问题。

namespace WindowsFormsApplication1
{
    public partial class textBoxLoggerViewer : Form
    {
        int counter;
        StreamReader sr;
        string line;
        string log_file_name = @"\logger.txt";
        string logger_file_to_read = Path.GetDirectoryName(Application.LocalUserAppDataPath) + @"\log";

        public textBoxLoggerViewer()
        {
            InitializeComponent();
            counter = 0;
            richTextBox1.Font = new Font("Consolas", 8f, FontStyle.Bold);
            richTextBox1.BackColor = Color.AliceBlue;
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
            backgroundWorker1.RunWorkerAsync();
        }

        private void textBoxLoggerViewer_Load(object sender, EventArgs e)
        {
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            sr = new StreamReader(logger_file_to_read+log_file_name);
            while (null != (line = sr.ReadLine()))
              {
                      counter = counter + 1;
                      backgroundWorker1.ReportProgress(1, line);
              }
            sr.Close();
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            richTextBox1.AppendText(e.UserState.ToString());
        }

    }
}

1 个答案:

答案 0 :(得分:0)

你可以看一下如何确定用户滚动的行数或者他从这个问题的答案中看到的行:

Winforms RichTextBox: How can I determine how many lines of text are visible?

为了正确显示进度,您应该按块读取文件块的内容,例如如果你正在读6M,那么读取300k的块,这样你的进度将分别为5%,10%,15%...

相关问题