/// <summary> /// Создает экземпляр класса /// </summary> /// <param name="eventLink">Логгер</param> /// <param name="workingDirectory">Рабочий каталог</param> /// <param name="writeSyncObject">Объект для синхронизации записи данных в базу</param> public Queue(IEventLink eventLink, String workingDirectory, Object writeSyncObject) { if (eventLink == null) throw new ArgumentNullException("eventLink"); if (String.IsNullOrEmpty(workingDirectory)) throw new ArgumentNullException("workingDirectory"); if (writeSyncObject == null) throw new ArgumentNullException("writeSyncObject"); _eventLink = eventLink; _workingDirectory = workingDirectory; _writeSyncObject = writeSyncObject; _queueSyncObject = new Object(); _queue = new Queue<Task>(GenericSerializer.Deserialize<List<Task>>(SpoolFile)); _mapping = GenericSerializer.Deserialize<HashSet<TableMapper>>(MappingFile); _worker = new PeriodicWorker(WatchQueueCallback); _worker.Start(_period); }
/// <summary> /// Создает экземпляр очереди отложенных обновлений /// </summary> /// <param name="eventLink">Логгер</param> /// <param name="immediateQueue">Очередь неотложных обновлений</param> /// <param name="writeSync">Объект для синхронизации записи в базу</param> public DelayedQueue(IEventLink eventLink, Queue immediateQueue, Object writeSync, String workingDirectory) { if (eventLink == null) throw new ArgumentNullException("eventLink"); if (immediateQueue == null) throw new ArgumentNullException("immediateQueue"); if (writeSync == null) throw new ArgumentNullException("writeSync"); if (String.IsNullOrEmpty(workingDirectory)) throw new ArgumentNullException("workingDirectory"); _eventLink = eventLink; _immediateQueue = immediateQueue; _writeSync = writeSync; _workingDirectory = workingDirectory; _worker = new PeriodicWorker(WatchForDelayedUpdates); _worker.Start(_workerPeriod); }
/// <summary> /// Освобождает ресурсы /// </summary> public void Dispose() { if (_worker != null) { // останавливаем рабочий поток _worker.Stop(ConstHelper.WorkerStopWait); _worker = null; } if (_queue != null) { // сериализуем очередь GenericSerializer.Serialize(_queue.ToList(), SpoolFile); _queue = null; } }