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

.net 将大文本文件加载到richtextbox中;对文本框滚动作出反应,.net,winforms,richtextbox,.net,Winforms,Richtextbox,我一直在考虑将文本文件(6MB)分部分加载,这样每次用户向下滚动时,它都会将文本文件的下一部分加载到richtextbox中 我不知道如何检查用户是否以及何时向下滚动,他向下滚动了多少,然后再从文本文件加载多少到richtextbox 另外,我希望progressbar在用户每次向下滚动并加载下一部分时都显示百分比。这样用户就可以知道上传下一部分文本需要多长时间 也许还有另一种解决方法。我想用最好的方式将6mb的文本文件加载到richtextbox我是说用最快的方式。或者,如果没有这么快,那么p

我一直在考虑将文本文件(6MB)分部分加载,这样每次用户向下滚动时,它都会将文本文件的下一部分加载到richtextbox中

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

另外,我希望progressbar在用户每次向下滚动并加载下一部分时都显示百分比。这样用户就可以知道上传下一部分文本需要多长时间

也许还有另一种解决方法。我想用最好的方式将6mb的文本文件加载到richtextbox我是说用最快的方式。或者,如果没有这么快,那么progressbar现在运行不好,它将显示还有多少剩余

我以前在那里用过一个计数器,只是为了检查他是否
=200,然后打破
;
我现在不需要它,我想解决一些如何加载大文件的问题

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());
        }

    }
}

您可以从这个问题的答案中获得如何确定用户滚动的行数或查看的行数的提示:

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