Пример #1
0
        /// <summary>
        /// Starts downloads when there are threads available
        /// </summary>
        protected virtual void ServiceDownloadQueue()
        {
            lock (m_requests.SyncRoot)
            {
                // Remove finished downloads
                for (int i = m_activeDownloads.Count - 1; i >= 0; i--)
                {
                    DownloadRequest request = (DownloadRequest)m_activeDownloads[i];
                    if (!request.IsDownloading)
                    {
                        m_activeDownloads.RemoveAt(i);
                    }
                }

                // Start new downloads
                while (m_activeDownloads.Count < MaxConcurrentDownloads)
                {
                    DownloadRequest request = GetNextDownloadRequest();
                    if (request == null)
                    {
                        break;
                    }

                    m_activeDownloads.Add(request);
                    request.Start();
                }
            }
        }