wpf在presenter(VM)中异步更新viewer中数据

    在MVP或者MVVM模式中,VM和Presenter通过binding与Viewer交换数据。在实际项目中,往往需要动态刷新界面的数据。本人一般通过刷新与之绑定的属性变化完成。但是,如果遇到数据量较大或者更新次数比较频繁的时候,就需要用到异步更新了,下面提供一种比较安全的方法来达到这一目的。
 
 首先定义分发器。它提供管理线程工作项队列的服务
 private readonly Dispatcher _dispatcher = Dispatcher.CurrentDispatcher;
 
 其次定义定时器。

_dataUpdateTimer = new DispatcherTimer();
_dataUpdateTimer.Interval = new TimeSpan(0, 0, 0, 0, 500);
_dataUpdateTimer.Tick += new EventHandler(OnUpdateTimerTick);
记录本线程的ID
_threadId = Thread.CurrentThread.ManagedThreadId;
最后是更新部分,主要功能是完成向界面上的绑定属性赋值为随机的数值
 private readonly Random _random = new Random((int)DateTime.Now.Ticks);
private void OnUpdateTimerTick(object sender, EventArgs e)
{
    if(_threadId == Thread.CurrentThread.ManagedThreadId) return;
    //CheckAccess 方法可以验证是否可以访问该线程;
    //与Winform的时候,常用的SelfSynchronizationContext == SynchronizationContext.Current && InvokeRequired == false 判定差不多
    if (!_dispatcher.CheckAccess())
    {
        _dispatcher.BeginInvoke(new ThreadStart(() =>
        {
           UIValue = _random.NextDouble() * 10000 / DateTime.Now.Millisecond;
        }), null);
        return;
    }
    UIValue = _random.NextDouble() * 10000 / DateTime.Now.Millisecond;
}

转载于:https://www.cnblogs.com/oliverxgwang/archive/2009/08/21/1551229.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值