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); } }