C# treeview的缓慢加载

C# treeview的缓慢加载,c#,performance,list,treeview,loading,C#,Performance,List,Treeview,Loading,我目前很难加载Treeview。我的应用程序有一个中央面板,其中加载了多个用户控件。每个节点都有5个父节点(组)的树状视图,拥有数十个子节点(人),共50个节点。 相同的函数加载treeview(请参见下面的内容): 第一个循环是添加组,第二个循环(到第一个循环中)添加人员 该函数大约需要10秒来加载50个节点。在我的世界里是永恒的 不知道该怎么做才能增强这一点。请看一下这个函数 public static List<TreeNode> ArbreCommun(Guid id

我目前很难加载Treeview。我的应用程序有一个中央面板,其中加载了多个用户控件。每个节点都有5个父节点(组)的树状视图,拥有数十个子节点(人),共50个节点。 相同的函数加载treeview(请参见下面的内容): 第一个循环是添加组,第二个循环(到第一个循环中)添加人员

该函数大约需要10秒来加载50个节点。在我的世界里是永恒的

不知道该怎么做才能增强这一点。请看一下这个函数

    public static List<TreeNode> ArbreCommun(Guid idUser)
    {
        System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();

        stopWatch.Start();


        List<TreeNode> ArbreParent = new List<TreeNode>();

        using (bdd_compactEntities contexte = new bdd_compactEntities())
        {
            if (contexte.Groupe.Count() > 0)
                foreach (Groupe grpItem in contexte.Groupe)
                {
                    if (grpItem.g_nom == "Tous")
                    {
                        TreeNode Tous = new TreeNode();
                        Tous.Text = grpItem.g_nom + " (" + contexte.Personne.Count() + ")";
                        Tous.Tag = grpItem.id;
                        Tous.ToolTipText = "ID groupe = " + grpItem.id;
                        Tous.ImageKey = "group";
                        Tous.SelectedImageKey = "group";

                        foreach (Personne pers in FonctionsYou.ChargementPersonnesTous())
                        {
                            TreeNode PersonneNode = new TreeNode();
                            PersonneNode.Text = pers.p_nom + " " + pers.p_prenom;
                            PersonneNode.Tag = pers.id;
                            PersonneNode.ToolTipText = "ID personne = " + pers.id;

                            if (FonctionsYou.HasGroupe(idUser, FonctionsYou.GetGroupeIdPers(pers.id)))
                            {
                                if (FonctionsYou.CheckDisponibiliteAthlete(pers.id))
                                {
                                    PersonneNode.ForeColor = Color.Blue;
                                    PersonneNode.ImageKey = "dispo";
                                    PersonneNode.SelectedImageKey = "dispo";
                                }
                                else
                                {
                                    PersonneNode.ForeColor = Color.Red;
                                    PersonneNode.ImageKey = "blesse";
                                    PersonneNode.SelectedImageKey = "blesse";
                                }
                            }

                            Tous.Nodes.Add(PersonneNode);
                        }

                        ArbreParent.Add(Tous);
                    }
                    else
                    {
                        TreeNode GroupeNode = new TreeNode();
                        GroupeNode.Text = grpItem.g_nom + " (" + grpItem.Personne.Count() + ")";
                        GroupeNode.Tag = grpItem.id;
                        GroupeNode.ToolTipText = "ID groupe = " + grpItem.id;
                        GroupeNode.ImageKey = "group";
                        GroupeNode.SelectedImageKey = "group";
                        if (FonctionsYou.HasGroupe(idUser, grpItem.id))
                        {
                            GroupeNode.ForeColor = Color.Green;
                        }

                        foreach (Personne pers in contexte.Personne.Where(x => x.Groupe_id == grpItem.id))
                        {
                            TreeNode PersonneNode = new TreeNode();
                            PersonneNode.Text = pers.p_nom + " " + pers.p_prenom;
                            PersonneNode.Tag = pers.id;
                            PersonneNode.ToolTipText = "ID personne = " + pers.id;

                            if (FonctionsYou.HasGroupe(idUser, FonctionsYou.GetGroupeIdPers(pers.id)))
                            {
                                if (FonctionsYou.CheckDisponibiliteAthlete(pers.id))
                                {
                                    PersonneNode.ForeColor = Color.Blue;
                                    PersonneNode.ImageKey = "dispo";
                                    PersonneNode.SelectedImageKey = "dispo";
                                }
                                else
                                {
                                    PersonneNode.ForeColor = Color.Red;
                                    PersonneNode.ImageKey = "blesse";
                                    PersonneNode.SelectedImageKey = "blesse";
                                }
                            }

                            GroupeNode.Nodes.Add(PersonneNode);
                        }
                        ArbreParent.Add(GroupeNode);

                    }
                }
        }
        stopWatch.Stop();
        MessageBox.Show(stopWatch.ElapsedMilliseconds + " ms");
        return ArbreParent;
    }
公共静态列表ArbreCommun(Guid idUser)
{
System.Diagnostics.Stopwatch秒表=新的System.Diagnostics.Stopwatch();
秒表。开始();
List arpreparent=新列表();
使用(bdd_compactEntities contexte=new bdd_compactEntities())
{
if(contexte.Groupe.Count()>0)
foreach(contexte.Groupe中的Groupe grpItem)
{
如果(grpItem.g_nom==“Tous”)
{
TreeNode Tous=新的TreeNode();
Tous.Text=grpItem.g_nom+”(“+contexte.Personne.Count()+”);
Tous.Tag=grpItem.id;
Tous.ToolTipText=“ID groupe=“+grpItem.ID;
Tous.ImageKey=“集团”;
Tous.SelectedImageKey=“组”;
foreach(基金会中的人员您的费用PersonneTous())
{
TreeNode PersonneNode=新的TreeNode();
personenode.Text=pers.p_nom+“”+pers.p_prenom;
personenode.Tag=pers.id;
personenode.ToolTipText=“ID personne=“+pers.ID;
if(FonctionsYou.HasGroupe(idUser,FonctionsYou.getgroupeippers(pers.id)))
{
if(功能您检查DisposifibiliteAthlete(个人id))
{
personenode.ForeColor=Color.Blue;
personenode.ImageKey=“dispo”;
PersonneNode.SelectedImageKey=“dispo”;
}
其他的
{
personenode.ForeColor=Color.Red;
personenode.ImageKey=“blesse”;
PersonneNode.SelectedImageKey=“blesse”;
}
}
Tous.Nodes.Add(personenode);
}
任意。添加(TOU);
}
其他的
{
TreeNode GroupeNode=新的TreeNode();
GroupeNode.Text=grpItem.g_nom+”(“+grpItem.Personne.Count()+”);
GroupeNode.Tag=grpItem.id;
GroupeNode.ToolTipText=“ID groupe=“+grpItem.ID;
GroupeNode.ImageKey=“组”;
GroupeNode.SelectedImageKey=“组”;
if(FonctionsYou.HasGroupe(idUser,grpItem.id))
{
GroupeNode.ForeColor=Color.Green;
}
foreach(contexte.Personne.Where(x=>x.Groupe_id==grpItem.id)中的人员)
{
TreeNode PersonneNode=新的TreeNode();
personenode.Text=pers.p_nom+“”+pers.p_prenom;
personenode.Tag=pers.id;
personenode.ToolTipText=“ID personne=“+pers.ID;
if(FonctionsYou.HasGroupe(idUser,FonctionsYou.getgroupeippers(pers.id)))
{
if(功能您检查DisposifibiliteAthlete(个人id))
{
personenode.ForeColor=Color.Blue;
personenode.ImageKey=“dispo”;
PersonneNode.SelectedImageKey=“dispo”;
}
其他的
{
personenode.ForeColor=Color.Red;
personenode.ImageKey=“blesse”;
PersonneNode.SelectedImageKey=“blesse”;
}
}
GroupeNode.Nodes.Add(PersonneNode);
}
arpreparent.Add(GroupeNode);
}
}
}
秒表;
MessageBox.Show(stopWatch.elapsedmillyses+“ms”);
返还任意报酬;
}

顺便说一句,这里是我的调用方法:

            List<TreeNode> _itemsNodes = FonctionsYou.ArbreCommun(userConnecte.uid);
            treeview_arbre.ImageList = FonctionsYou.GetImageListTV();
            // Display a wait cursor while the TreeNodes are being created.
            Cursor.Current = Cursors.WaitCursor;

            // Suppress repainting the TreeView until all the objects have been created.
            treeview_arbre.BeginUpdate();

            foreach (TreeNode node in _itemsNodes)
            {
                treeview_arbre.Nodes.Add(node);
            }

            // Reset the cursor to the default for all controls.
            Cursor.Current = Cursors.Default;

            // Begin repainting the TreeView.
            treeview_arbre.EndUpdate();
List\u itemsNodes=FonctionsYou.ArbreCommun(userConnecte.uid);
treeview_arbre.ImageList=FonctionsYou.getImageListV();
//创建树节点时显示等待光标。
Cursor.Current=Cursors.WaitCursor;
//禁止重新绘制树视图,直到所有对象都已创建。
treeview_arbre.BeginUpdate();
foreach(项目节点中的树节点)
{
treeview_arbre.Nodes.Add(node);
}
//将光标重置为所有控件的默认值。
Cursor.Current=Cursors.Default;
//开始重新绘制树视图。
treeview_arbre.EndUpdate();

您确定问题出在您的树视图中吗?如果你发表评论会快得多吗