ibcadmin 发表于 2019-12-26 09:06:18

异步加载树节点

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 FormCallBackTest
11 {
12   public partial class Form1 : Form
13   {
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;
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 }<br />   源码下载地点: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

<p> </p>
页: [1]
查看完整版本: 异步加载树节点