//This method is used to add new workers once new logins have been defined public void AddMissingWorkers() { //Obtain a lock on the workers, since the user might be causing this to be called concurrently from the GUI and from the startup procedure lock (Workers) { foreach (var profile in Configuration.RegionProfiles) { //Obtain a lock on this profile because it is concurrently being modified by the user in the edit dialogue lock (profile) { if (profile.Login == null) { //No login has been specified for this region continue; } if (Workers.ContainsKey(profile.Abbreviation)) { //There is already a worker for this region, may it be active or inactive - do not proceed continue; } Worker worker = new Worker(Program, this, profile, Configuration, Provider); Workers[profile.Abbreviation] = worker; worker.Run(); } } } }