Пользовательский ChangeMonitor для .Net MemoryCache вызывает исключение недопустимой операции

Я написал свой собственный класс монитора изменений для .Net MemoryCache. Кажется, он инициализируется хорошо, но когда я пытаюсь добавить его в кэш, он выдает исключение 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);
    }
 }

Код, который я использую для создания кеша policy и добавить пару ключ / значение в кеш

        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);

. Вызов Set вызывает исключение недопустимой операции, что является странным, потому что, согласно документации MSDN, он выдает только исключения ArgumentNull, Argument, ArgumentOutOfRange и NotSupported.

I Я уверен, что совершаю простую ошибку. Но сложно найти хорошую документацию или примеры по написанию собственного монитора изменений. Приветствуется любая помощь

8
задан Keith 1 April 2011 в 19:37
поделиться