Exemplo n.º 1
0
        public static IWorker CreateWorker(WorkerHandlers handlers)
        {
            IWorker worker = new ThreadWorker();

            RegisterCallbacks(worker, handlers);
            return(worker);
        }
        public void Download(Task task, WorkerHandlers handlers)
        {
            int totalRunningManualWorkers = CountRunningManualWorkers();

            if (totalRunningManualWorkers < MANUAL_WORKER_LIMIT && SomeRules.CanDownloadTask(task.Status))
            {
                IWorker worker = GetFreeManualWorker();
                if (worker == null)
                {
                    worker = WorkerFactory.CreateWorker(handlers);
                    manualWorkerList.Add(worker);
                }
                worker.Start(task);
            }
        }
        public void StartQueue(int workerLimit, WorkerHandlers handlers)
        {
            if (!IsBusy)
            {
                this.workerLimit = workerLimit;

                if (workerList.Count < workerLimit)
                {
                    for (int i = workerList.Count + 1; i <= workerLimit; i++)
                    {
                        workerList.Add(WorkerFactory.CreateWorker(handlers));
                    }
                }

                IsBusy     = true;
                IsStopping = false;
                taskTimer.Start();
            }
        }
Exemplo n.º 4
0
 private static void RegisterCallbacks(IWorker worker, WorkerHandlers handlers)
 {
     if (handlers != null)
     {
         worker.Downloading += ((object sender) =>
         {
             if (handlers.Downloading != null)
             {
                 handlers.Downloading(sender);
             }
         });
         worker.ProgressChanged += ((object sender, double percent) =>
         {
             if (handlers.ProgressChanged != null)
             {
                 handlers.ProgressChanged(sender, percent);
             }
         });
         worker.Complete += ((object sender) =>
         {
             if (handlers.Complete != null)
             {
                 handlers.Complete(sender);
             }
         });
         worker.Cancelled += ((object sender) =>
         {
             if (handlers.Cancelled != null)
             {
                 handlers.Cancelled(sender);
             }
         });
         worker.Failed += ((object sender, Exception ex) =>
         {
             if (handlers.Failed != null)
             {
                 handlers.Failed(sender, ex);
             }
         });
     }
 }