wpf 处理耗时的工作利用 BrackgroundWorder
来源:互联网 发布:水果软件中文版 编辑:程序博客网 时间:2024/05/20 20:19
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());
}
});
}
- wpf 处理耗时的工作利用 BrackgroundWorder
- 使用多线程处理耗时工作
- Qt中针对比较耗时的工作防止界面假死的处理方式
- WPF中的几种处理线程的工作方式:
- 适配器中加载耗时图片的处理
- iOS对耗时操作的处理方法
- MFC 处理耗时操作的一种办法
- 多线程处理耗时的业务逻辑
- WPF的图像处理
- 利用IntentService实现在broadcastreceiver中比较耗时的任务
- 网上找了一段利用aop计算耗时日志的
- 利用Byteman来统计Java中方法的耗时
- WPF中UI及时更新,如何在处理长时间工作时,保持界面的持续更新
- WPF中UI及时更新,如何在处理长时间工作时,保持界面的持续更新
- BroadcastReceiver处理耗时操作
- AsyncTask处理耗时任务
- Swift-处理耗时操作
- 回调 处理耗时操作
- oracle 防止重试密码导致用户被锁
- ORACLE 普通表转换成分区表(在线重定义)
- 损人不利己的飞鸽传书 部分代码公开
- Glossary
- MyEclipse 6.0更改代码提示快捷键,同样Mylipse快捷键的更改都如此。
- wpf 处理耗时的工作利用 BrackgroundWorder
- 一致性哈希算法(consistent hashing)
- Esx4.0开机报错(vsd-mount失败)
- 使用Intel编译器(7)其它(1)多目标处理器程序的编写指南
- Android中 如何判断现在所处的界面是否为home主桌面
- oracle: OCA-047-题解与实验(12)--Create table的常见写法
- How to write device driver
- ehcache的使用(2)-- 集群
- Practical Java(重点版)之异常处理