public void runAnalysisAsync() { if (m_analysisModules.Count < 1) { ErrorMessages.NoAnalysisModuleSelected(); } m_counterSem = new Semaphore(0, m_analysisModules.Count); m_endThread = new Thread(new ThreadStart(finishAnalysis)); m_endThread.Start(); Dictionary <string, Type> modules = StateMaster.getModules(); Dictionary <Type, string> moduleTags = new Dictionary <Type, string>(); foreach (KeyValuePair <string, Type> kvPair in modules) { moduleTags[kvPair.Value] = kvPair.Key; } foreach (IModule module in m_analysisModules) { m_threads.Add(new Thread(new ParameterizedThreadStart(analysisThread))); if (module.preferencesAvailable()) { module.savePreferences(StateMaster.getPreferenceData(moduleTags[module.GetType()])); } m_threads[m_threads.Count - 1].Start(module); } }