using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Cosmos.Build.Windows.Config.Tasks { public class TaskQueue : Task { /// /// The tasks. /// private Queue _tasks = new Queue(); private int _lastCount; private int _count; private string _name; public override string Name { get { return _name; } } public override void Execute() { lock (_tasks) { try { _lastCount = _tasks.Count; while (true) { if (_tasks.Count == 0) break; Task task = _tasks.Dequeue(); _count = _tasks.Count; task.Status += new EventHandler(task_Status); task.Execute(); } OnStatus(100, "Done"); } catch (Exception E) { System.Windows.Clipboard.SetText(E.ToString()); OnStatus(100, "Error: " + E.Message); } } } void task_Status(object sender, TaskStatusEventArgs e) { //float p = e.Percentage / _lastCount; //p += (_count / _lastCount) * 100; _name = e.TaskName; OnStatus(e.Percentage, e.Message); } public void Add(Task task) { lock(_tasks) _tasks.Enqueue(task); } } }