var bw = new System.ComponentModel.BackgroundWorker();
bw.DoWork += (s, e) =>
{
foreach (var item in items)
{
Packet packet = new Packet();
Body body = new Body();
packet.Read(item.RawData);
body.Read(packet.Body);
var terminalNo = body.TerminalNo;
var carrier = carriers.Where(x => x.Key == body.TerminalNo);
if (carrier == null || carrier.Count() == 0) continue;
var alarm = Csla.Core.ObjectCloner.Clone(carrier.First().Value) as CarrierPosition;
alarm.ProcessPositionData(body);
alarm.ID = item.ID;
alarm.AlarmProcessStatus = item.ProcessStatus;
cp.Add(alarm);
}
e.Result = cp;
};
bw.RunWorkerCompleted += (s, e) =>
{
try
{
CarrierPositions cps = e.Result as CarrierPositions;
if (cps != null)
{
_StepTimer = new System.Threading.Timer(new System.Threading.TimerCallback(addalarmsToMonitor), null, 10, 500);
}
cplist = cps.OrderByDescending(x => x.LocalTime).Take(500).ToList<CarrierPosition>();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
};
bw.RunWorkerAsync();
private void addalarmsToMonitor(object state)
{
this.Dispatcher.BeginInvoke((Action)delegate()
{
try
{
if (cplist == null) return;
if (cplist.Count() > 10)
{
_RealtimemonitorViewModel.Model.Alarms.AddRange(cplist.Take(10));
cplist = cplist.Skip(10).ToList<CarrierPosition>();
}
else
{
_RealtimemonitorViewModel.Model.Alarms.AddRange(cplist);
_RealtimemonitorViewModel.Model.AlarmsCount = _RealtimemonitorViewModel.Model.Alarms.Count();
cplist = null;
_StepTimer.Dispose();
_StepTimer = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
});
}