【问题标题】:loading large text file into a richtextbox; reacting to textbox scroll将大文本文件加载到富文本框中;对文本框滚动做出反应
【发布时间】:2011-08-19 00:44:54
【问题描述】:

我正在考虑以某种方式分部分加载文本文件 (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());
        }

    }
}

【问题讨论】:

    标签: .net winforms richtextbox


    【解决方案1】:

    您可以从该问题的答案中获得有关如何确定用户滚动的行数或他正在查看的行数的提示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2021-01-26
      • 2019-11-13
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多