我正在嘗試使用文件作爲觸發器來刷新我的緩存項目。當文件被改變時,我需要觸發一個事件(每次文件改變時)。我目前正在使用HostFileChangeMonitor類。這裏就是一個緩存項被設置,使用策略將其鏈接到一個文件:緩存和重複觸發NotifyOnChanged
private static void SetPolicy(CacheNames cacheName, CacheItem item)
{
string strCacheName = cacheName.ToString();
CacheItemPolicy policy;
if (_policies.TryGetValue(strCacheName, out policy))
{
_cacheObject.Set(item, policy);
return;
}
policy = new CacheItemPolicy();
List<string> filePaths = new List<string> {
string.Format(@"{0}\{1}.txt",Config.AppSettings.CachePath,cacheName.ToString())
};
var changeMonitor = new HostFileChangeMonitor(filePaths);
_cacheObject.Set(item, policy);
changeMonitor.NotifyOnChanged(new OnChangedCallback(RefreshCache));
policy.ChangeMonitors.Add(changeMonitor);
}
的NotifyOnChanged火災只有一次,但是。正因爲如此,我目前刪除並重新添加項目到緩存由NotifyOnChanged稱爲RefreshCache方法:
private static void RefreshCache(object state)
{
//remove from cache
WcfCache.ClearCache("Refreshed");
//resubscribe to NotifyOnChanged event
WcfCache.SetCache("Refreshed", true, CacheNames.CacheFileName);
//grab all cache data and refresh each in parallel
}
有沒有更好的方式來做到這一點?有沒有我可以利用的事件會永遠開火(而不是像第一次這樣NotifyOnChanged)?這看起來很脆弱。如果HostFileChangeMonitor沒有正確添加一次,整個應用程序的緩存將永遠不會刷新。
我以前沒有用過這個。結合[這篇文章](http://stackoverflow.com/questions/1764809/filesystemwatcher-changed-event-is-raised-twice)使我能夠正確地設置它。謝謝! – DougJones