public void Start(ProgressBox progress) { Queue <ThreadWorker> threadQueue = new Queue <ThreadWorker>(); for (int i = 0; i < databases.Count; i++) { string database = databases[i]; ThreadWorker _worker = new ThreadWorker() { WorkerReportsProgress = true }; _worker.DoWork += StartScan; _worker.ProgressChanged += progress.ProgressChanged; threadQueue.Enqueue(_worker); } SqlConnection connection = Connection.Create(host, ConnectionType.DefaultDatabase); foreach (var _worker in threadQueue) { _worker.RunWorkerCompleted += progress.FinishScan; if (!canceled) { try { connection.Open(); currentWorker = _worker; _worker.RunWorkerAsync(); } finally { connection.Close(); } } } OnFinish(); }