wpf 处理耗时的工作利用 BrackgroundWorder

   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());
                }

            });
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值