public DownloadManager(string configPath, NetworkManager networkManager, CacheManager cacheManager, BufferManager bufferManager) { _networkManager = networkManager; _cacheManager = cacheManager; _bufferManager = bufferManager; _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); _protectCacheInfoManager = new ProtectedCacheInfoManager(_cacheManager); _watchTimer = new WatchTimer(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); }