/// <summary> /// Threads the run. /// </summary> private void ThreadRun( ) { if (threadCount < this.ConcurrentThreads && Running && Threads.Count > 0 && Arguments.Count > 0) { Thread t = new Thread(new ThreadStart(delegate { --threadCount; if (Threads.Count > 0 && Arguments.Count > 0) { try { TimeSpan ttss = DateTime.Now.TimeOfDay; Threads.Dequeue( ) (Arguments.Dequeue( )); TimeSpan ttse = DateTime.Now.TimeOfDay; TimeSpan tdiff = ttse.Subtract(ttss); Log.Debug(string.Format("[{0}] Thread time: {1}", this.Name, tdiff)); // sometimes the same thread starts multiple times. ThreadRun( ); } catch (Exception ex) { --threadCount; Log.Warn(string.Format("[{0}] {1}", this.Name, ex.Message), ex); } finally { } } })); Log.Debug(string.Format("[{0}] Starting Thread: {1}", this.Name, ++threadCount)); RunningThreads.Add(t); t.Start( ); } else { if (Threads.Count == 0 && threadCount <= 0) { Running = false; } } }