void ParserServiceParseInformationUpdated(object sender, ParseInformationEventArgs e) { WorkbenchSingleton.DebugAssertMainThread(); foreach (TreeNode node in classBrowserTreeView.Nodes) { AbstractProjectNode prjNode = node as AbstractProjectNode; if (prjNode != null && e.ProjectContent.Project == prjNode.Project) { prjNode.UpdateParseInformation(e.OldCompilationUnit, e.NewCompilationUnit); } } }
// running on main thread, invoked by the parser thread when a compilation unit changed void UpdateThread() { lock (pending) { foreach (ParseInformationEventArgs e in pending) { foreach (TreeNode node in classBrowserTreeView.Nodes) { AbstractProjectNode prjNode = node as AbstractProjectNode; if (prjNode != null && e.ProjectContent.Project == prjNode.Project) { prjNode.UpdateParseInformation(e.OldCompilationUnit, e.NewCompilationUnit); } } } pending.Clear(); } }
// running on main thread, invoked by the parser thread when a compilation unit changed void UpdateThread() { lock (pending) { foreach (ICompilationUnit[] units in pending) { ICompilationUnit nonNullUnit = units[1] ?? units[0]; foreach (TreeNode node in classBrowserTreeView.Nodes) { AbstractProjectNode prjNode = node as AbstractProjectNode; if (prjNode != null && prjNode.Project.IsFileInProject(nonNullUnit.FileName)) { prjNode.UpdateParseInformation(units[0], units[1]); } } } pending.Clear(); } }