我有一个应用程序正在检查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调用,它也不会停止并正确给出预期的结果。如果再次触发它进行实际处理,它将第二次不起作用。