Метод, вызванный из события FileSystemWatcher, останавливается после изменения текста richtextbox - PullRequest
0 голосов
/ 26 января 2019

У меня есть приложение, которое проверяет текстовый файл на наличие новых записей (строк), чтобы обработать их и вывести результат в richtextbox.После изменения проверки файла с простого цикла на FileSystemWatcher, он останавливает промежуточное выполнение безо всякой причины.

Я попытался установить точки останова и пошагово пройти код, установив блоки try-catch с помощьюне повезло.

Настройка FileSystemWatcher:

FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = (logfile_path.Substring(0, logfile_path.Length-14));
fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite;
fileSystemWatcher.Filter = "iCCard_Log.log";
fileSystemWatcher.Changed += new FileSystemEventHandler(FileSystemWatcher_Changed);
fileSystemWatcher.EnableRaisingEvents = true;

private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
    Checklog(); //calls a long part, which ends in Checkmain()
}

Проблема представлена ​​в этой строке:

private void Checkmain()
{
     RichTextBoxExtensions.AppendText_Error(errorBox, Environment.NewLine + "INFO: " + name + " - " + logline + " - " + firstclassstart_time.ToString(), Color.Red);
     ....
}

AppendText_Error:

public static class RichTextBoxExtensions
{
    public static void AppendText_Error(this RichTextBox box, string text, Color color)
    {
        box.SelectionStart = box.TextLength; //stops here
        box.SelectionLength = 0;
        box.SelectionColor = color;
        box.AppendText(text);
        box.SelectionColor = box.ForeColor;
    }
}

Существует такжеthis:

private void errorBox_TextChanged(object sender, EventArgs e)
{
    errorBox.SelectionStart = errorBox.Text.Length;
    errorBox.ScrollToCaret();
}

Код останавливается на box.SelectionStart = box.TextLength;

Если я вернусь к методу цикла, который вызывает точно такие же вещи, он работает отлично (записывает строку результата вrichtextbox, а также записывает его в TXT).Если начальная точка - это файловая система, она просто остановится на указанной строке, ничего не делая.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...