更改RichTextBox文本后,从FileSystemWatcher事件调用的方法停止

时间:2019-01-25 21:58:20

标签: c# winforms filesystemwatcher

我有一个应用程序正在检查txt文件中是否有新条目(行)以对其进行处理并将结果输出到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;
    }
}

还有这个:

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

代码在box.SelectionStart = box.TextLength;处停止

如果我回到调用完全相同的方法的循环方法,它会很好地工作(将结果行写入richtextbox,也将其写入txt)。如果起始点是filesystemwatcher,它将不执行任何操作就停在上述行。

程序启动时,它会运行整个过程一次,以检查某些解析器是否正常工作,并且即使在启动时由filesystemwatcher调用,它也不会停止并正确给出预期的结果。如果再次触发它进行实际处理,它将第二次不起作用。

0 个答案:

没有答案