/// <summary> /// Raises a thread start event /// </summary> /// <param name="thread"></param> private void RaiseThreadStart(ThreadManager thread) { ThreadManagerEventArgs args = new ThreadManagerEventArgs(thread); if (ThreadStarting != null) { ThreadStarting(this, args); } if (ThreadStarted != null) { ThreadStarted(null, args); } }
/// <summary> /// Raises a thread finish event /// </summary> /// <param name="thread"></param> internal void RaiseThreadFinished(ThreadManager thread) { ThreadManagerEventArgs args = new ThreadManagerEventArgs(thread); if (ThreadFinishing != null) { ThreadFinishing(this, args); } if (ThreadStopped != null) { ThreadStopped(null, args); } if (thread.Name == "Cache Management Thread" && !thread.Cancelled && thread.UnResponsive) { Classes.ThreadManager.ThreadStart(_threadCacheManager, "Cache Management Thread", ThreadPriority.Lowest); } }
private void ThreadManager_ThreadForcedToClose(object sender, ThreadManagerEventArgs e) { Shared.EventLog.Add(String.Format("Thread forced to close: {0}, Unresponsive: {1}, Marked For Removal: {2}", e.Thread.Name, e.Thread.UnResponsive.ToString(), e.Thread.MarkedForRemoval.ToString())); Shared.EventLog.Add(String.Format("Start Time: {0}", e.Thread.TimeStart.ToString("g"))); Shared.EventLog.Add(String.Format("End Time: {0}", e.Thread.TimeFinish.ToString("g"))); if (!Program.Closing) { if (e.Thread.Name == Constants.Service.ThreadLocalDataMonitoring) { _serviceDataThread = new LocalServiceDataThread(); _serviceDataThread.OnNewServerDetails += ServerDataThread_OnNewServerDetails; _serviceDataThread.MonitorDisks = _serviceSettings.Find(Constants.Settings.MonitorDisks).GetValue <bool>(); _serviceDataThread.MonitorNetwork = _serviceSettings.Find(Constants.Settings.MonitorNetworks).GetValue <bool>(); ThreadManager.ThreadStart(_serviceDataThread, Constants.Service.ThreadLocalDataMonitoring, System.Threading.ThreadPriority.BelowNormal); } } }
/// <summary> /// Event method to remove from list of threads /// </summary> /// <param name="sender"></param> /// <param name="e"></param> internal static void thread_ThreadFinishing(object sender, ThreadManagerEventArgs e) { e.Thread._markedForRemoval = true; e.Thread.ThreadFinishing -= thread_ThreadFinishing; e.Thread.CancelThread(30000, false); }