zoukankan      html  css  js  c++  java
  • [Silverlight] 关于线程调用的扩展方法

    Silverlight 里需要考虑异步调用的问题,比较麻烦。所以写了两个简单的扩展方法。

    一个方法是为了更新 UI 控件。可以自动在不同的调用环境下判断是否需要 Invoke, 从而安全的调用控件相关的方法。

    另一个方法的目的是把任务放到 ThreadPool 里去等待后续的异步执行。
    代码如下:
    using System.Windows;
    using System;
    using System.Threading;

    public static class ThreadCallExtensions
    {
        
    /// <summary>
        
    /// 用于 UI 控件的更新,或其他情形。可自动判断当前线程是否为 UI 线程,
        
    /// 而触发同步或异步调用。
        
    /// </summary>
        
    /// <param name="obj"></param>
        
    /// <param name="action"></param>
        public static void CallThreadSafely(this DependencyObject obj, Action action)
        {
            
    if (obj.CheckAccess())
            {
                action();
            }
            
    else
            {
                obj.Dispatcher.BeginInvoke(action);
            }
        }

        
    /// <summary>
        
    /// 异步调用
        
    /// </summary>
        
    /// <param name="obj"></param>
        
    /// <param name="action"></param>
        public static void CallInBackground(this DependencyObject obj, Action action)
        {
            ThreadPool.QueueUserWorkItem(
                
    delegate {
                    action();
                });
        }
    }


    一个调用示例:
    var db = CreateDataAccess();

    // this 是当前的 Page
    this.CallInBackground(
        
    delegate {
            var roles 
    = db.FindAll<Role>("Role"nullnull);

            
    // listRoles 是一个 ListBox
            listRoles.CallThreadSafely(
                
    delegate {
                    listRoles.ItemsSource 
    = roles;
                });
        });


    这样,可以在调用方有效的减少很多因为满足同步/异步不同调用方式的需要而写的代码。

  • 相关阅读:
    万万没想到,JVM内存结构的面试题可以问的这么难?
    理解JVM运行时数据区域,看这一篇文章就够了
    JVM扫盲:虚拟机内存模型与高效并发
    Java虚拟机难?一文了解JVM
    一篇简单易懂的原理文章,让你把JVM玩弄与手掌之中
    简单理解:JVM为什么需要GC
    一文让你读懂Java类加载机制!
    JVM结构的简单梳理
    深入理解JVM的类加载
    BAT面试必问题系列:JVM的判断对象是否已死和四种垃圾回收算法总结
  • 原文地址:https://www.cnblogs.com/RChen/p/1373559.html
Copyright © 2011-2022 走看看