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(); } }
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); } }); } }