个思路方法是为了更新 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;
});
});
这样可以在方有效减少很多满足同步/异步区别方式需要而写代码
最新评论