异步加载树节点

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Threading; 8 using System.Windows.Forms; 9 10 namespace FormCallBackTest11 {12     public partial class Form1 : Form13     {14         //声明委托已实现回调机制 15         private delegate void CallBackTest();16         private CallBackTest callBackTest;17 18         public delegate void DelegateDone();//定义一个委托19         public DelegateDone GetDelegateHandler; //声明委托20 21         public Form1()22         {23             InitializeComponent();24 25             //初始化回调26             GetDelegateHandler = new DelegateDone(ThdFunc); //绑定需要回调的函数 27         }28         private void button1_Click(object sender, EventArgs e)29         {30             Thread th1 = new Thread(new ThreadStart(DoWork));//创建线程31             th1.IsBackground = true;//后台线程32             th1.Start();//启动线程 33         }34 35         private void ThdFunc()36         {37             List<string> listTest = new List<string>();38 39             GetData(ref listTest);//获取数据40             InitTreeInfo(listTest);//构建树节点41         }42         private void GetData(ref List<string> listTest)43         {44             listTest.Clear();45             for (int i = 0; i < 1000000; i++)46             {47                 listTest.Add("测试数据" + i);48             }49         }50         private void InitTreeInfo(List<string> listTest)51         {52             for (int i = 0; i < listTest.Count; i++)53             {54                 TreeNode SubNode = new TreeNode();55                 SubNode.Name = Convert.ToString(i + 1);56                 SubNode.Text = listTest[i];57                 this.Invoke((MethodInvoker)delegate()58                 {59                     treeView1.Nodes.Add(SubNode);60                 });//防止跨线程61             }62         }63         void DoWork()64         {65             callBackTest = new CallBackTest(GetDelegateHandler);66             CallBack(callBackTest);67         }68         //使用委托 69         private void CallBack(CallBackTest Delegate)70         {71             Delegate();72         }73 74     }75 }   源码下载地址:https://files-cdn.cnblogs.com/files/yc1224/%E5%BC%82%E6%AD%A5%E5%8A%A0%E8%BD%BD%E6%A0%91%E8%8A%82%E7%82%B9.zip
(0)

相关推荐