多线程填写treeview控件(vb.net)

功能:把选定文件夹下的dll、子文件夹和子文件夹中的dll填写到窗体的treeview控件上。

缺点:窗体简单,代码有些混乱,线程之间的调用可能没有到最优化。

实现:imagelist中的图片需要自己重新定义。

多线程的优点:可以及时响应用户的操作,不至于产生“未响应”的尴尬;设计合理(结合需求)的话,可使软件的性能提高。

多线程的编写:结构合理、注意同步。

以上是我对这个例程和多线程的个人体会,如有不妥之处,还请大家批评指正。

Imports System.IO
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents TreeView1 As System.Windows.Forms.TreeView
Friend WithEvents btnOpenBrower As System.Windows.Forms.Button
Friend WithEvents ImageList1 As System.Windows.Forms.ImageList

 1<system.diagnostics.debuggerstepthrough()> Private Sub InitializeComponent()   
 2Me.components = New System.ComponentModel.Container   
 3Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))   
 4Me.TreeView1 = New System.Windows.Forms.TreeView   
 5Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)   
 6Me.btnOpenBrower = New System.Windows.Forms.Button   
 7Me.SuspendLayout()   
 8'   
 9'TreeView1   
10'   
11Me.TreeView1.Dock = System.Windows.Forms.DockStyle.Left   
12Me.TreeView1.ImageList = Me.ImageList1   
13Me.TreeView1.Location = New System.Drawing.Point(0, 0)   
14Me.TreeView1.Name = "TreeView1"   
15Me.TreeView1.Size = New System.Drawing.Size(376, 581)   
16Me.TreeView1.TabIndex = 0   
17'   
18'ImageList1   
19'   
20Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)   
21Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer)   
22Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent   
23'   
24'btnOpenBrower   
25'   
26Me.btnOpenBrower.Location = New System.Drawing.Point(408, 64)   
27Me.btnOpenBrower.Name = "btnOpenBrower"   
28Me.btnOpenBrower.Size = New System.Drawing.Size(96, 23)   
29Me.btnOpenBrower.TabIndex = 1   
30Me.btnOpenBrower.Text = "Open Brower"   
31'   
32'Form1   
33'   
34Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)   
35Me.ClientSize = New System.Drawing.Size(536, 581)   
36Me.Controls.Add(Me.btnOpenBrower)   
37Me.Controls.Add(Me.TreeView1)   
38Me.Name = "Form1"   
39Me.Text = "Form1"   
40Me.ResumeLayout(False) 
41
42End Sub 
43
44#End Region   
45Private Sub OpenBrower()   
46Dim f As New FolderBrowserDialog   
47If f.ShowDialog = DialogResult.OK Then   
48Me.TreeView1.Nodes.Clear()   
49Me.SuspendLayout()   
50Dim nodeTemp As TreeNode = CType(Me.Invoke(New AddTreeNodeHandler(AddressOf Me.AddFileToTreeview), New Object() {f.SelectedPath}), TreeNode)   
51Me.AddFile(New DirectoryInfo(f.SelectedPath), nodeTemp)   
52Me.ResumeLayout(False)   
53End If   
54End Sub 
55
56Private Sub AddFile(ByVal dirPath As DirectoryInfo, ByVal node As TreeNode)   
57Dim tempHandler As New AddFileHandler(AddressOf Me.AddFileToTreeNode)   
58For Each dir As DirectoryInfo In dirPath.GetDirectories()   
59Dim nodeTemp As TreeNode = CType(Me.Invoke(tempHandler, New Object() {dir.Name, CLASSIO.Directory, node}), TreeNode)   
60Me.AddFile(dir, nodeTemp)   
61Next   
62For Each file As FileInfo In dirPath.GetFiles("*.dll")   
63Me.Invoke(tempHandler, New Object() {file.Name, CLASSIO.File, node})   
64Next   
65End Sub 
66
67Private Function AddFileToTreeNode(ByVal str As String, ByVal cls As CLASSIO, ByVal node As TreeNode) As TreeNode   
68Dim nodeTemp As New TreeNode(str)   
69nodeTemp.ImageIndex = CInt(cls)   
70node.Nodes.Add(nodeTemp)   
71nodeTemp.SelectedImageIndex = nodeTemp.ImageIndex   
72Return nodeTemp   
73End Function 
74
75Private Function AddFileToTreeview(ByVal str As String) As TreeNode   
76Dim nodeTemp As New TreeNode(str)   
77Me.TreeView1.Nodes.Add(nodeTemp)   
78Return nodeTemp   
79nodeTemp.SelectedImageIndex = CInt(CLASSIO.Directory)   
80End Function 
81
82Private Sub btnOpenBrower_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenBrower.Click   
83'多线程   
84Dim t As Threading.Thread = New Threading.Thread(AddressOf Me.OpenBrower)   
85t.Start() 
86
87'单线程   
88'Me.OpenBrower()   
89End Sub   
90End Class   
91Public Enum CLASSIO   
92File = 1   
93Directory = 0   
94End Enum   
95Public Delegate Function AddFileHandler(ByVal str As String, ByVal cls As CLASSIO, ByVal Node As TreeNode) As TreeNode   
96Public Delegate Function AddTreeNodeHandler(ByVal str As String) As TreeNode</system.diagnostics.debuggerstepthrough()>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus