C# 在后台线程中填充时实时更新TreeView

C# 在后台线程中填充时实时更新TreeView,c#,multithreading,winforms,treeview,C#,Multithreading,Winforms,Treeview,主题说明了一切,下面是我现在掌握的代码: public void StartCDA() { backgroundWorker1.RunWorkerAsync(); } public delegate void AddCDAnode(DirectoryInfo dirinfo); public void ListDirectory(DirectoryInfo path) { ImagesTV.Nodes.Add(C

主题说明了一切,下面是我现在掌握的代码:

    public void StartCDA()
    {
        backgroundWorker1.RunWorkerAsync();
    }

    public delegate void AddCDAnode(DirectoryInfo dirinfo);

    public void ListDirectory(DirectoryInfo path)
    {
        ImagesTV.Nodes.Add(CreateDirectoryNode(path));
    }

    public void Addnode(DirectoryInfo dirinfo)
    {
        Invoke(new AddCDAnode(ListDirectory), new object[] {dirinfo});
    }

    private TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
    {
        var directoryNode = new TreeNode(directoryInfo.Name);
        foreach (var directory in directoryInfo.GetDirectories())
        {
            Statustext = directory.FullName;
            directoryNode.Nodes.Add(CreateDirectoryNode(directory));
        }
        foreach (var file in directoryInfo.GetFiles())
            directoryNode.Nodes.Add(new TreeNode(file.Name));
        return directoryNode;
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        Addnode(CdaDir);
    }
现在的问题是,实际上Treeview并没有在后台进行填充,这非常奇怪,因为我使用后台工作程序来实现这一点。但主要的问题是,这里我有一种图像查看器(表单分为两部分,左边是treeview,右边是图片预览框),要查看的图像列表有时包含大约1000个元素,这就是为什么我需要能够看到treeview的“实时”更新,同时能够浏览项目和查看图像。将无法删除、移动或以某种方式影响Treeview,唯一的操作是单击树。
谢谢。

我真的建议你用WPF来做这个。。。否则,只需在发生更改和更新时实现一个事件处理程序(可能您必须使其失效-我的winforms有点过时)。问题是,这只是我拥有的整个应用程序的一个模块。它完全在winforms中完成。实际上,我似乎可以使用WPF创建此模块。对吗?老实说,没有线索。。。我相信事实上有一些互操作,尽管我从来没有使用过它,所以我恐怕帮不了什么忙。需要澄清的是:您是说从
CreateDirectoryNode
返回的
TreeNode
没有子节点吗?它似乎是递归的……有种族吗?