public static void Main()

in Mail2Bug/Main.cs [23:100]


        public static void Main(string[] args) // string[] args
        {
            if(args.Contains("-break"))
            {
                Logger.Info("Breaking into debugger");
                Debugger.Break();
            }

            try
            {
                string configPath = ConfigurationManager.AppSettings["ConfigPath"];
                string configsFilePattern = ConfigurationManager.AppSettings["ConfigFilePattern"];

                var configFiles = Directory.GetFiles(configPath, configsFilePattern);
                if (configFiles.Length == 0)
                {
                    Logger.ErrorFormat("No configs found (path='{0}', pattern='{1}')", configPath, configsFilePattern);
                    throw new ConfigurationErrorsException("No configs found");
                }

                var configs = new List<Config>();
                var configTimeStamps = new Dictionary<string, DateTime>();

                foreach (var configFile in configFiles)
                {
                    // Save the timestamp for the config so that we can detect if it changed later on
                    configTimeStamps[configFile] = File.GetLastWriteTime(configFile);

                    // Load the config and add it to the list.
                    // If loading failed, print error message and continue
                    var cfg = TryLoadConfig(configFile);
                    if (cfg == null)
                    {
                        Logger.ErrorFormat("Couldn't load config file {0}. Skipping that config file.", configFile);
                        continue;
                    }

                    configs.Add(cfg);
                }

                if (configs.Count == 0)
                {
                    throw new ConfigurationErrorsException("None of the configs were valid");
                }

                InitInstances(configs);

                var iterations = ReadIntFromAppConfig("Iterations", 200);
                var interval = TimeSpan.FromSeconds(ReadIntFromAppConfig("IntervalInSeconds", 1));
                var useThreads = ReadBoolFromAppConfig("UseThreads", false);

                for (var i = 0; i < iterations; ++i )
                {
                    Logger.InfoFormat("{0} Iteration {1} {0}", new string('-', 15), i);
                    RunInstances(useThreads);

                    if (IsConfigsChanged(configTimeStamps))
                    {
                        break;
                    }

                    Thread.CurrentThread.Join(interval); // Sleep between iterations
                }

                foreach (var instance in _instances)
                {
                    var disposable = instance as IDisposable;
                    if (disposable != null)
                    {
                        disposable.Dispose();
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.ErrorFormat("Exception caught in main - aborting. {0}", exception);
            }
        }