//----------------------------------------------------------------------------------- public void OnFournisseurTermine(HashSet <CReferenceObjetDependant> setDependances) { lock (typeof(CLockerArbre)) { List <TreeNode> nodesTypeToCreate = new List <TreeNode>(); Dictionary <TreeNode, List <TreeNode> > nodesObjetToCreate = new Dictionary <TreeNode, List <TreeNode> >(); Dictionary <Type, TreeNode> dicTypeToNode = new Dictionary <Type, TreeNode>(); foreach (TreeNode node in m_arbre.Nodes) { if (node.Tag is Type) { dicTypeToNode[(Type)node.Tag] = node; } } m_lblProgression.SetInfo(I.T("Reading @1 element(s)|20014", setDependances.Count.ToString())); List <CObjetDonnee> lstObjets = CReferenceObjetDonnee.GetObjets(setDependances, m_objetRacine.ContexteDonnee); m_lblProgression.SetInfo(I.T("Adding @1 element(s)|20013", setDependances.Count.ToString())); foreach (CObjetDonnee objet in lstObjets) { if (objet == null) { continue; } Type tpObjet = objet.GetType(); TreeNode nodeType = null; if (!dicTypeToNode.TryGetValue(tpObjet, out nodeType)) { nodeType = new TreeNode(); FillNodeType(nodeType, tpObjet); dicTypeToNode[tpObjet] = nodeType; nodesTypeToCreate.Add(nodeType); } bool bExiste = false; if (objet != null) { foreach (TreeNode node in nodeType.Nodes) { CObjetDonnee objetEx = node.Tag as CObjetDonnee; if (objetEx != null && objetEx.Equals(objet)) { bExiste = true; break; } } if (!bExiste) { TreeNode nodeObjet = new TreeNode(); FillNodeObjet(nodeObjet, objet); List <TreeNode> lstNodes = null; if (!nodesObjetToCreate.TryGetValue(nodeType, out lstNodes)) { lstNodes = new List <TreeNode>(); nodesObjetToCreate[nodeType] = lstNodes; } lstNodes.Add(nodeObjet); } } } Invoke((MethodInvoker) delegate { m_arbre.BeginUpdate(); foreach (TreeNode node in nodesTypeToCreate) { m_arbre.Nodes.Add(node); } foreach (KeyValuePair <TreeNode, List <TreeNode> > kv in nodesObjetToCreate) { foreach (TreeNode nodeFils in kv.Value) { kv.Key.Nodes.Add(nodeFils); } } m_arbre.EndUpdate(); }); } }