Kei*_*ith 8 .net c# invalidoperationexception
我为.Net MemoryCache编写了自己的自定义更改监视器类.它似乎初始化很好,但是当我尝试将它添加到Cache时,它会抛出一个InvalidOperation异常"该方法已经被调用,并且只能被调用一次."
我的更改监视器类
internal class MyChangeMonitor : ChangeMonitor
{
private Timer _timer;
private readonly string _uniqueId;
private readonly TypeAsOf _typeAsOf;
private readonly string _tableName;
public GprsChangeMonitor(TypeAsOf typeAsOf, string tableName)
{
bool initComplete = false;
try
{
_typeAsOf = typeAsOf;
_tableName = tableName;
_uniqueId = Guid.NewGuid().ToString();
TimeSpan ts = new TimeSpan(0, 0, 5, 0, 0);
_timer = new Timer {Interval = ts.TotalMilliseconds};
_timer.Elapsed += CheckForChanges;
_timer.Enabled = true;
_timer.Start();
initComplete = true;
}
finally
{
base.InitializationComplete();
if(!initComplete)
Dispose(true);
}
}
void CheckForChanges(object sender, System.Timers.ElapsedEventArgs e)
{
//check for changes, if different
base.OnChanged(_typeAsOf);
}
}
Run Code Online (Sandbox Code Playgroud)
我用来创建缓存策略并将密钥/值对添加到缓存的代码
CacheItemPolicy policy = new CacheItemPolicy
{
UpdateCallback = OnCacheEntryUpdateCallback
};
policy.AbsoluteExpiration = SystemTime.Today.AddHours(24);
//monitor the for changes
string tableName = QuickRefreshItems[type];
MyChangeMonitor cm = new MyChangeMonitor(typeAsOf, tableName);
policy.ChangeMonitors.Add(cm);
cm.NotifyOnChanged(OnRefreshQuickLoadCacheItems);
MyCache.Set(cacheKey, value, policy);
Run Code Online (Sandbox Code Playgroud)
Set调用抛出了无效的操作异常,这很奇怪,因为根据MSDN文档,它只抛出ArgumentNull,Argument,ArgumentOutOfRange和NotSupported Exceptions.
我相信我一定是犯了一个简单的错误.但很难找到关于编写自己的自定义更改监视器的好文档或示例.任何帮助,将不胜感激
| 归档时间: |
|
| 查看次数: |
7940 次 |
| 最近记录: |