private void TailUpdateEvent(TaileFileInfo taileFileInfo) { if (taileFileInfo.Name == File) { _evaluate = false; Updated = true; int rows = 1; FileSize = taileFileInfo.Size; foreach (var item in taileFileInfo.FilesRows) { if (rows >= taileFileInfo.FilesRows.Count) { if (Dispatcher != null) { Dispatcher.BeginInvoke( new Action(() => AddRow(item, true))); } } else { if (Dispatcher != null) { Dispatcher.BeginInvoke( new Action(() => AddRow(item))); } } rows++; } } }
/// <summary> /// Find tab page by name from tail tabFile /// and call updatePage /// </summary> /// <param name="taileFileInfo"></param> private void TailUpdateEvent(TaileFileInfo taileFileInfo) { var page = tabControl1.TabPages[taileFileInfo.TabName]; if (page.InvokeRequired) { page.Invoke(new EventHandler(delegate { page.Update(tabControl1); })); } }
public void TailFile(CancellationToken ct) { using (StreamReader reader = new StreamReader(new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) { //start at the end of the file long lastMaxOffset = reader.BaseStream.Length; //while (_tailingFile) while (!ct.IsCancellationRequested) { Thread.Sleep(100); //if the file size has not changed, idle if (reader.BaseStream.Length == lastMaxOffset) { continue; } //Create tailfile info object var tailFileInfo = new TaileFileInfo { Name = _fileName, Size = reader.BaseStream.Length, TabName = _tabName }; //seek to the last max offset reader.BaseStream.Seek(lastMaxOffset, SeekOrigin.Begin); //read out of the file until the EOF string line; while ((line = reader.ReadLine()) != null) { tailFileInfo.FilesRows.Add(line); } //publish new file rows. _messageService.Publish(tailFileInfo); //update the last max offset lastMaxOffset = reader.BaseStream.Position; } reader.Close(); reader.DiscardBufferedData(); reader.Dispose(); Dispose(); } }