public void AddChildJob(TreeJob child) { lock (this._syncObj) { this._childJobs.Add(child); } }
public bool RemoveChildJob(TreeJob child) { lock (this._syncObj) { return this._childJobs.Remove(child); } }
private bool CheckOnJobCompleted(TreeJob treeJob) { if (treeJob.State != TreeJobState.Completed) { return(false); } bool childrenCompleted = true; foreach (TreeJob childJob in treeJob.ChildJobs) { bool childCompleted = CheckOnJobCompleted(childJob); if (childCompleted) { treeJob.RemoveChildJob(childJob); } childrenCompleted &= childCompleted; } if (childrenCompleted) { TreeJob parentJob = treeJob.Parent; if (parentJob != null) { parentJob.RemoveChildJob(treeJob); OnJobCompleted(parentJob); } } return(childrenCompleted); }
private void OnJobChanged(TreeJob treeJob, TreeJobChangedEvent args) { if (JobChanged != null) { JobChanged(this, new TreeJobChangedEventArgs(treeJob, args)); } }
public void AddChildJob(TreeJob child) { lock (this._syncObj) { this._childJobs.Add(child); } }
public bool RemoveChildJob(TreeJob child) { lock (this._syncObj) { return(this._childJobs.Remove(child)); } }
private void OnJobCompleted(TreeJob treeJob) { if (CheckOnJobCompleted(treeJob)) { if (JobCompleted != null) { JobCompleted(this, new TreeJobCompletedEventArgs(treeJob)); } } }
public void Schedule(TreeJob treeJob) { if (this.CancellationSource.IsCancellationRequested) { return; } if (this._threadCounter.CanAdd) { Execute(treeJob); } else { if (!this.CancellationSource.IsCancellationRequested) { this._waitingJobs.Enqueue(treeJob); OnJobChanged(treeJob, TreeJobChangedEvent.WaitingAdded); } } }
public void Schedule(TreeJob treeJob) { if (this.CancellationSource.IsCancellationRequested) { return; } if (this._threadCounter.CanAdd) { Execute(treeJob); } else { if (!this.CancellationSource.IsCancellationRequested) { this._waitingJobs.Enqueue(treeJob); OnJobChanged(treeJob, TreeJobChangedEvent.WaitingAdded); } } }
private void Execute(TreeJob treeJob) { lock (this._runningJobsLock) { this._threadCounter.Increment(); treeJob.State = TreeJobState.Running; this._runningJobs.Add(treeJob); OnJobChanged(treeJob, TreeJobChangedEvent.RunningAdded); } Task.Factory.StartNew(treeJob.Action) .ContinueWith(t => { lock (this._runningJobsLock) { this._runningJobs.Remove(treeJob); } treeJob.State = TreeJobState.Completed; OnJobCompleted(treeJob); Progress.AddItems(treeJob.PromisedChildCount); Progress.CompleteItems(1); this._threadCounter.Decrement(); OnJobChanged(treeJob, TreeJobChangedEvent.RunningCompleted); CheckOnCompleted(); }) .ContinueOnException(t => { if (t.Exception != null) { log.ErrorFormat("Error occurred while processing task completion: {0}", t.Exception); } }); }
private void OnJobChanged(TreeJob treeJob, TreeJobChangedEvent args) { if (JobChanged != null) { JobChanged(this, new TreeJobChangedEventArgs(treeJob, args)); } }
public TreeJobChangedEventArgs(TreeJob job, TreeJobChangedEvent jobEvent) { this.Job = job; this.Event = jobEvent; }
public TreeJobCompletedEventArgs(TreeJob job) { this.Job = job; }
public TreeJobChangedEventArgs(TreeJob job, TreeJobChangedEvent jobEvent) { this.Job = job; this.Event = jobEvent; }
private void RefreshNode( TreeTask treeTask, TreeJob parentJob, TreeNode treeNode, ProgressItem progress ) { ConcreteTemplateNodeDefinition nodeDefinition = treeNode.Tag as ConcreteTemplateNodeDefinition; if (treeTask.CancellationSource.IsCancellationRequested) { return; } if (nodeDefinition == null) { return; } TreeJob treeJob = new TreeJob(nodeDefinition); if (parentJob != null) { parentJob.AddChildJob(treeJob); treeJob.Parent = parentJob; } WeakReference treeNodeRef = new WeakReference(treeNode); treeTask.JobCompleted += (sender, args) => { TreeTask task = sender as TreeTask; if (task != null && treeNodeRef.IsAlive) { if (!task.CancellationSource.IsCancellationRequested) { TreeNode targetNode = (TreeNode) treeNodeRef.Target; UpdateTreeCounts(targetNode, task.Info.Mode); } } }; bool refreshChildren = treeTask.Info.Hierarchically; Action refreshNodeAction = () => { try { TemplateNodeInfo templateNode = nodeDefinition.TemplateNode; if (templateNode == null || !nodeDefinition.NodeAvailable) { return; } templateNode.LastUpdateNode = DateTime.Now; CurrentStorage storage = GetStorage(templateNode.ConnectionGroup); templateNode.LoadUserParameters(storage); if (nodeDefinition.NodeActivated) { RefreshQueries(treeTask, nodeDefinition, progress); } if (templateNode.IsLeaf()) { return; } AddLoadingNode(treeNode); templateNode.UpdateChildren(treeTask.Info.Mode, treeTask.CancellationSource); FillTreeNodes(templateNode, treeNode.Nodes); if (refreshChildren) { treeJob.PromisedChildCount = treeNode.Nodes.Count; foreach (TreeNode node in treeNode.Nodes) { if (node != null) { RefreshNode(treeTask, treeJob, node, progress); } } } } catch (Exception exc) { log.Error("MSSQLServerAuditor.Managers:RefreshNode:subTask (Exception)", exc); } }; treeJob.Action = refreshNodeAction; lock (this._schedulingLock) { treeTask.Schedule(treeJob); } }
private void RefreshNode( TreeTask treeTask, TreeJob parentJob, TreeNode treeNode, ProgressItem progress ) { ConcreteTemplateNodeDefinition nodeDefinition = treeNode.Tag as ConcreteTemplateNodeDefinition; if (treeTask.CancellationSource.IsCancellationRequested) { return; } if (nodeDefinition == null) { return; } TreeJob treeJob = new TreeJob(nodeDefinition); if (parentJob != null) { parentJob.AddChildJob(treeJob); treeJob.Parent = parentJob; } WeakReference treeNodeRef = new WeakReference(treeNode); treeTask.JobCompleted += (sender, args) => { TreeTask task = sender as TreeTask; if (task != null && treeNodeRef.IsAlive) { if (!task.CancellationSource.IsCancellationRequested) { TreeNode targetNode = (TreeNode)treeNodeRef.Target; UpdateTreeCounts(targetNode, task.Info.Mode); } } }; bool refreshChildren = treeTask.Info.Hierarchically; Action refreshNodeAction = () => { try { TemplateNodeInfo templateNode = nodeDefinition.TemplateNode; if (templateNode == null || !nodeDefinition.NodeAvailable) { return; } templateNode.LastUpdateNode = DateTime.Now; CurrentStorage storage = GetStorage(templateNode.ConnectionGroup); templateNode.LoadUserParameters(storage); if (nodeDefinition.NodeActivated) { RefreshQueries(treeTask, nodeDefinition, progress); } if (templateNode.IsLeaf()) { return; } AddLoadingNode(treeNode); templateNode.UpdateChildren(treeTask.Info.Mode, treeTask.CancellationSource); FillTreeNodes(templateNode, treeNode.Nodes); if (refreshChildren) { treeJob.PromisedChildCount = treeNode.Nodes.Count; foreach (TreeNode node in treeNode.Nodes) { if (node != null) { RefreshNode(treeTask, treeJob, node, progress); } } } } catch (Exception exc) { log.Error("MSSQLServerAuditor.Managers:RefreshNode:subTask (Exception)", exc); } }; treeJob.Action = refreshNodeAction; lock (this._schedulingLock) { treeTask.Schedule(treeJob); } }
private void Execute(TreeJob treeJob) { lock (this._runningJobsLock) { this._threadCounter.Increment(); treeJob.State = TreeJobState.Running; this._runningJobs.Add(treeJob); OnJobChanged(treeJob, TreeJobChangedEvent.RunningAdded); } Task.Factory.StartNew(treeJob.Action) .ContinueWith(t => { lock (this._runningJobsLock) { this._runningJobs.Remove(treeJob); } treeJob.State = TreeJobState.Completed; OnJobCompleted(treeJob); Progress.AddItems(treeJob.PromisedChildCount); Progress.CompleteItems(1); this._threadCounter.Decrement(); OnJobChanged(treeJob, TreeJobChangedEvent.RunningCompleted); CheckOnCompleted(); }) .ContinueOnException(t => { if (t.Exception != null) { log.ErrorFormat("Error occurred while processing task completion: {0}", t.Exception); } }); }
public TreeJobCompletedEventArgs(TreeJob job) { this.Job = job; }
private bool CheckOnJobCompleted(TreeJob treeJob) { if (treeJob.State != TreeJobState.Completed) { return false; } bool childrenCompleted = true; foreach (TreeJob childJob in treeJob.ChildJobs) { bool childCompleted = CheckOnJobCompleted(childJob); if (childCompleted) { treeJob.RemoveChildJob(childJob); } childrenCompleted &= childCompleted; } if (childrenCompleted) { TreeJob parentJob = treeJob.Parent; if (parentJob != null) { parentJob.RemoveChildJob(treeJob); OnJobCompleted(parentJob); } } return childrenCompleted; }
private void OnJobCompleted(TreeJob treeJob) { if (CheckOnJobCompleted(treeJob)) { if (JobCompleted != null) { JobCompleted(this, new TreeJobCompletedEventArgs(treeJob)); } } }