silverlight:[Silverlight] 有关线程调用的扩展思路方法

  Silverlight 里需要考虑异步问题比较麻烦所以写了两个简单扩展思路方法

  个思路方法是为了更新 UI Control控件可以自动在区别环境下判断是否需要 Invoke, 从而安全Control控件相关思路方法

  另个思路方法是把任务放到 ThreadPool 里去等待后续异步执行

  代码如下:

using.Windows;
using;
using.Threading;
publicThreadCallExtensions
{
  ///<summary>
  ///用于UIControl控件更新或其他情形可自动判断当前线程是否为UI线程
  ///而触发同步或异步
  ///</summary>
  ///<paramname="obj"></param>
  ///<paramname="action"></param>
  publicvoidCallThreadSafely(thisDependencyObjectobj,Actionaction)
  {
    (obj.CheckAccess)
    {
      action;
    }
    
    {
      obj.Dispatcher.BeginInvoke(action);
    }
  }
  ///<summary>
  ///异步
  ///</summary>
  ///<paramname="obj"></param>
  ///<paramname="action"></param>
  publicvoidCallInBackground(thisDependencyObjectobj,Actionaction)
  {
    ThreadPool.QueueUserWorkItem(
      delegate{
        action;
      });
  }
}


  举例:

vardb=CreateDataAccess;
//this是当前Page
this.CallInBackground(
  delegate{
    varroles=db.FindAll<Role>("Role",null,null);
    //listRoles是个ListBox
    listRoles.CallThreadSafely(
      delegate{
        listRoles.ItemsSource=roles;
      });
  });


  这样可以在方有效减少很多满足同步/异步区别方式需要而写代码

Tags:  silverlight2 silverlight.2.0 silverlight是什么 silverlight

延伸阅读

最新评论

发表评论