异步加载树节点
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)