Это мой рабочий код. У меня есть файловый менеджер, который отслеживает мой файл журнала, когда файл обновляется (он много обновляет) он читает журнал и выводит строки, соответствующие регулярному выражению, на текстовое окно. Проблема заключается в том, что он читает файл с самого начала и снова печатает строки с регулярным выражением, поэтому я получаю повторяющиеся данные в текстовом поле. Я также не знаю, правильно ли я настроил его для запуска файла, прочитанного из отдельного потока, поэтому моя программа не «замораживается» при чтении больших файлов журнала.Прочитать файл журнала из последней прочитанной позиции
private void btnStart_Click(object sender, EventArgs e)
{
if ((Properties.Settings.Default.setting_logfile != "") && (Properties.Settings.Default.setting_logfolder != ""))
{
if (btnStart.Text == "Start Parsing")
{
// change text on button and switch status image
btnStart.Text = "Stop Parsing";
pbStatus.Image = Properties.Resources.online;
new Thread(() => Run()).Start();
}
else
{
btnStart.Text = "Start Parsing";
pbStatus.Image = Properties.Resources.offline;
fsWatcher.EnableRaisingEvents = false;
}
}
else
{
tbOutput.Text = "Please select a log file to parse.";
}
}
private void Run()
{
try
{
fsWatcher.Changed += new FileSystemEventHandler(OnChanged);
fsWatcher.EnableRaisingEvents = true;
}
catch (Exception ex)
{
MessageBox.Show("An error occurred: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OnChanged(object source, FileSystemEventArgs e)
{
string line;
Regex pattern = new Regex(@"\[[\w :]+\]\s<SYSTEMWIDE_MESSAGE>:");
Stream stream = File.Open(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader streamReader = new StreamReader(stream);
while ((line = streamReader.ReadLine()) != null)
{
Match match = pattern.Match(line);
if (match.Success)
{
tbOutput.AppendText(line + "\r\n");
}
}
streamReader.Close();
stream.Close();
}
Этот код не будет работать, потому что вы обращаетесь к 'tbOutput' (который я предполагаю, что это' TextBox' из thhread не-UI. –
Код выше работ, у меня есть это работает – Manvaril