public DownloadManager(string configPath, ExchangeManager networkManager, CacheManager cacheManager, BufferPool bufferPool) { _networkManager = networkManager; _cacheManager = cacheManager; _bufferPool = bufferPool; _settings = new Settings(configPath); _downloadTaskManager = new TaskManager(this.DownloadingThread); for (int i = 0; i < _threadCount; i++) { _decodeTaskManagers.Add(new TaskManager(this.DecodingThread)); } _volatileDownloadItemInfoManager = new VolatileDownloadItemInfoManager(); _volatileDownloadItemInfoManager.AddEvent += (info) => this.Event_AddInfo(info); _volatileDownloadItemInfoManager.RemoveEvent += (info) => this.Event_RemoveInfo(info); _downloadItemInfoManager = new DownloadItemInfoManager(); _downloadItemInfoManager.AddEvents += (info) => this.Event_AddInfo(info); _downloadItemInfoManager.RemoveEvents += (info) => this.Event_RemoveInfo(info); _watchTimer = new EventScheduler(this.WatchThread); _watchTimer.Start(new TimeSpan(0, 1, 0)); _cacheManager.AddedBlockEvents += (hashes) => this.Update_DownloadBlockStates(true, hashes); _cacheManager.RemovedBlockEvents += (hashes) => this.Update_DownloadBlockStates(false, hashes); }