загрузка большого текстового файла в richtextbox; реагируя на прокрутку текстового поля - PullRequest
0 голосов
/ 19 августа 2011

Я думал как-то загрузить текстовый файл (6 МБ) по частям, чтобы каждый раз, когда пользователь прокручивал его, он загружал следующую часть текстового файла в richtextbox.

Я не знаюкак проверить, прокручивал ли пользователь и когда он прокручивал вниз, и сколько он прокручивал вниз, а затем, сколько снова загрузить из текстового файла в richtextbox.

Также я хочу, чтобы индикатор выполнения отображал проценты каждый разПользователь прокручивает вниз и загружает следующую часть.Таким образом, пользователь будет знать, сколько времени займет загрузка следующей части текста.

Может быть, есть другой способ решить эту проблему.Я хочу, чтобы лучший способ загрузить текстовый файл 6 МБ в 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 голосов
/ 14 августа 2012

Вы можете получить подсказку о том, как определить количество строк, которые пользователь прокручивал, или какие строки он просматривает из ответа на этот вопрос:

Winforms RichTextBox: Как определить количество видимых строк текста?

Чтобы правильно показать прогресс, вы должны прочитать содержимое фрагмента файла по фрагменту, например, если вы читаете 6M, то читайте кусками по 300k, таким образом ваш прогресс пойдет на 5%, 10%, 15% ...

...