練習 3:實作背景快取
示範如何實作背景載入快取。
開啟 EmployeeBrowser.sln,預設路徑 C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex03\begin,編譯。
EmployeeServices.cs,加入兩個方法: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 執行緒池處理。
MainForm.cs,在 MainForm_Load 加入啟動背景工作:private void MainForm_Load(object sender, EventArgs e)
{
this.ToolStripLabel1.Text = ConnectionManager.StatusText;
EmployeesDataSet tempDataset = EmployeeService.GetContactDetails();
if (tempDataset != null)
this.EmployeesDataSet.Merge(tempDataset);
EmployeeService.BeginBackgroundLoad();
}
ConnectionManager.cs 中 IsOnline 回傳 false