練習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(null, null);
}
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菜單命令運行應用程序。現在應用程序不再連接數據庫處於離線狀態,所有的雇員信息已經照片已經被緩存。