private void LoadLog(int pos, int count, GoalRecord goal, bool print = false) { if (_busy) { return; } if (pos < 0) { return; } var dateBefore = DateTime.Now.AddYears(-1); CalcRowsCount(lvLogView); if (count <= 0) { return; } _busy = true; tsbAnchor.Enabled = false; tsbBackward.Enabled = false; tsbFilterEdit.Enabled = false; _lastForwardState = tsbForward.Enabled; tsbForward.Enabled = false; tsbEnd.Enabled = false; ThreadPool.QueueUserWorkItem(arg => { int linescount; var results = Data.GetSysLogRecords(pos, count, dateBefore, out linescount, true); var method = new MethodInvoker(() => { _reportrows.Clear(); var row = 0; foreach (string[] rec in results) { if (rec.Length != 12) { continue; } var item = new ListViewItem(rec[0]); if (row % 2 != 0) { item.BackColor = Color.FromKnownColor(KnownColor.WhiteSmoke); } var overpass = rec[2]; var way = rec[3]; var product = Data.GetFineProductName(rec[4]); var riser = rec[5]; var addr = string.Join("", rec, 1, 5).Trim().Length > 0 ? string.Format("Эстакада {0}. Путь {1}. {2}. Стояк {3}", overpass, way, product, riser) : ""; item.SubItems.Add(addr); var mess = rec[6]; item.SubItems.Add(mess); var waggon = rec[7]; item.SubItems.Add(waggon); var type = rec[8]; item.SubItems.Add(type); var maxheight = rec[9]; item.SubItems.Add(maxheight); var setpoint = rec[10]; item.SubItems.Add(setpoint); var filled = rec[11]; item.SubItems.Add(filled); _reportrows.Add(item); row++; } UpdateColumnWidths(lvLogView); if (print) { return; } lvLogView.BeginUpdate(); try { lvLogView.Items.Clear(); lvLogView.Items.AddRange(_reportrows.ToArray()); } finally { lvLogView.EndUpdate(); } tsbForward.Enabled = _lastForwardState; switch (goal) { case GoalRecord.FirstRecord: GotoRecord(GoalRecord.FirstRecord); tsbBackward.Enabled = lvLogView.Items.Count >= _viewCount; tsbForward.Enabled = true; tsbEnd.Enabled = true; break; case GoalRecord.NextRecord: GotoRecord(GoalRecord.LastRecord); tsbEnd.Enabled = tsbForward.Enabled; tsbBackward.Enabled = lvLogView.Items.Count >= _viewCount; break; default: GotoRecord(GoalRecord.LastRecord); tsbForward.Enabled = false; tsbEnd.Enabled = false; tsbBackward.Enabled = lvLogView.Items.Count >= _viewCount; break; } _busy = false; tsbAnchor.Enabled = true; tsbFilterEdit.Enabled = true; } ); if (InvokeRequired) { BeginInvoke(method); } else { method(); } }); }