캐시 된 항목을 새로 고치기 위해 파일을 트리거로 사용하려고합니다. 파일이 변경되면 이벤트가 발생합니다 (파일이 변경 될 때마다). 현재 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 화재 한 번만 그러나. 이 할 수있는 더 나은 방법이
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에 의해 호출 된 RefreshCache 방법에 캐시에 항목을 삭제 한 후 무엇입니까? NotifyOnChanged와 같은 처음 시간이 아닌 항상 불이 들어올 수있는 이벤트가 있습니까? 이것은 꽤 허약 해 보인다. HostFileChangeMonitor가 한 번 올바르게 추가되지 않으면 전체 앱의 캐시가 새로 고침되지 않습니다.
이전에는 사용하지 않았습니다. 즉, [이 게시물] (http://stackoverflow.com/questions/1764809/filesystemwatcher-changed-event-is-raised-twice)와 함께 사용하면 올바르게 설정할 수 있습니다. 감사! – DougJones