注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 IB客座主编(四)美国西蒙公..
 帮助

Enterprise Library 2.0 Hands On Lab 翻译(11):缓存应用程序块(三)


2006-10-09 22:27:00
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67642
练习3:实现后台缓存
该练习将示范如何实现后台加载。
 
第一步
打开EmployeeBrowser.sln 项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex03\begin,并编译。
 
第二步 实现后台加载
1.在解决方案管理器中选择EmployeeServices.cs文件,选择View | Code菜单命令,添加如下两个方法,它们将实现在后台加载缓存。
// TODO: PopulateCache & BeginBackgroundLoad

private static void PopulateCache()

{

    
byte[] photoData = null;

    EmployeesDataSet dsEmployees 
= GetContactDetails();

    
if (dsEmployees == null)

        
return;

    CacheManager cache 
= CacheFactory.GetCacheManager();

    
foreach (EmployeesDataSet.EmployeesRow employee in dsEmployees.Employees)

    
{

        
if (!cache.Contains(employee.EmployeeID.ToString()))

        
{

            EmployeeDataProvider dataProvider 
= new EmployeeDataProvider();

            photoData 
= dataProvider.GetEmployeePhotoData(employee.EmployeeID);

            cache.Add(employee.EmployeeID.ToString(), photoData);

        }


    }


}


private delegate void PopulateCacheDelegate();

public static void BeginBackgroundLoad()

{

    
if (!ConnectionManager.IsOnline)

        
return;


    PopulateCacheDelegate mi 
= new PopulateCacheDelegate(PopulateCache);

    mi.BeginInvoke(
nullnull);

}
BeginBackgroundLoad方法使用一个委托在后台线程开始PopulateCache方法,它将会被.NET工作线程处理。
2.选择MainForm.cs文件,选择View | Code菜单命令,在方法MainForm_Load中加入如下代码开始后台工作。
private void MainForm_Load(object sender, EventArgs e)

{

    
this.ToolStripLabel1.Text = ConnectionManager.StatusText;


    
// Load data into the 'EmployeesDataSet'.

    EmployeesDataSet tempDataset 
= EmployeeService.GetContactDetails(); 

    
if (tempDataset != null)

        
this.EmployeesDataSet.Merge(tempDataset);

    
// TODO: Start loading cache in the background

    EmployeeService.BeginBackgroundLoad();

}
 
第三步 运行应用程序
1.选择Debug | Start Without Debugging菜单命令运行应用程序。
不要浏览任何雇员数据,在等待大概10秒后退出应用程序。如果应用程序在线它将尝试后台加载雇员照片,缓存存储在物理存储位置上,即持久缓存,但是与前一个练习使用了不同的PartitionName
2.在解决方案管理器中选择ConnectionManager.cs,选择View | Code菜单命令,在下面的代码中修改IsOnline属性的值。
static public bool IsOnline

{
    
get return false; }
}
3.选择Debug | Start Without Debugging菜单命令运行应用程序。现在应用程序不再连接数据库处于离线状态,所有的雇员信息已经照片已经被缓存。
 
更多Enterprise Library的文章请参考《Enterprise Library系列文章

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67642





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: