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

treeview|多线程|控件

功能:把选定文件夹下的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
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.TreeView1 = New System.Windows.Forms.TreeView
Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
Me.btnOpenBrower = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'TreeView1
'
Me.TreeView1.Dock = System.Windows.Forms.DockStyle.Left
Me.TreeView1.ImageList = Me.ImageList1
Me.TreeView1.Location = New System.Drawing.Point(0, 0)
Me.TreeView1.Name = "TreeView1"
Me.TreeView1.Size = New System.Drawing.Size(376, 581)
Me.TreeView1.TabIndex = 0
'
'ImageList1
'
Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)
Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
'
'btnOpenBrower
'
Me.btnOpenBrower.Location = New System.Drawing.Point(408, 64)
Me.btnOpenBrower.Name = "btnOpenBrower"
Me.btnOpenBrower.Size = New System.Drawing.Size(96, 23)
Me.btnOpenBrower.TabIndex = 1
Me.btnOpenBrower.Text = "Open Brower"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(536, 581)
Me.Controls.Add(Me.btnOpenBrower)
Me.Controls.Add(Me.TreeView1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region
Private Sub OpenBrower()
Dim f As New FolderBrowserDialog
If f.ShowDialog = DialogResult.OK Then
Me.TreeView1.Nodes.Clear()
Me.SuspendLayout()
Dim nodeTemp As TreeNode = CType(Me.Invoke(New AddTreeNodeHandler(AddressOf Me.AddFileToTreeview), New Object() {f.SelectedPath}), TreeNode)
Me.AddFile(New DirectoryInfo(f.SelectedPath), nodeTemp)
Me.ResumeLayout(False)
End If
End Sub

Private Sub AddFile(ByVal dirPath As DirectoryInfo, ByVal node As TreeNode)
Dim tempHandler As New AddFileHandler(AddressOf Me.AddFileToTreeNode)
For Each dir As DirectoryInfo In dirPath.GetDirectories()
Dim nodeTemp As TreeNode = CType(Me.Invoke(tempHandler, New Object() {dir.Name, CLASSIO.Directory, node}), TreeNode)
Me.AddFile(dir, nodeTemp)
Next
For Each file As FileInfo In dirPath.GetFiles("*.dll")
Me.Invoke(tempHandler, New Object() {file.Name, CLASSIO.File, node})
Next
End Sub

Private Function AddFileToTreeNode(ByVal str As String, ByVal cls As CLASSIO, ByVal node As TreeNode) As TreeNode
Dim nodeTemp As New TreeNode(str)
nodeTemp.ImageIndex = CInt(cls)
node.Nodes.Add(nodeTemp)
nodeTemp.SelectedImageIndex = nodeTemp.ImageIndex
Return nodeTemp
End Function

Private Function AddFileToTreeview(ByVal str As String) As TreeNode
Dim nodeTemp As New TreeNode(str)
Me.TreeView1.Nodes.Add(nodeTemp)
Return nodeTemp
nodeTemp.SelectedImageIndex = CInt(CLASSIO.Directory)
End Function

Private Sub btnOpenBrower_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenBrower.Click
'多线程
Dim t As Threading.Thread = New Threading.Thread(AddressOf Me.OpenBrower)
t.Start()

'单线程
'Me.OpenBrower()
End Sub
End Class
Public Enum CLASSIO
File = 1
Directory = 0
End Enum
Public Delegate Function AddFileHandler(ByVal str As String, ByVal cls As CLASSIO, ByVal Node As TreeNode) As TreeNode
Public Delegate Function AddTreeNodeHandler(ByVal str As String) As TreeNode

时间: 2024-12-11 07:50:25

多线程填写treeview控件(vb.net)的相关文章

使用多线程加载多个Xml文件到TreeView控件

treeview|xml|多线程|加载|控件 在很多情况下程序员需要采用多线程来开发应用程序,用户可以在前台操作数据或其他工作,在后台程序正在加载很大的一些文件,而这一过程不会影响到前台的用户.在这篇文章中,我来讲述一下怎样通过多个线程来加载多个文件.在这个例子中我们将来研究这样一件事情,读取多个Xml文件并通过TreeView把它们显示出来.我们可以通过数据库来完成,不过为了保持例子的简单这里采用了Xml文件. 你会注意到我们有两个xml文件同原代码放在一起.程序用户界面如下: Filedis

vb.net的TreeView控件

一个TreeView(树型结构)控件是显示结点(Node)对象的等级体系结构,每个Node对象包含了一个标签和可选的点位图.TreeView控件通常用于显示文档头.索引中的条目.磁盘上的文件和目录或者可以显示为等级结构的各种其他信息.Windows资源管理器左侧部分就是一个典型的树结构.TreeView控件在工具箱中的图标如图所示: 1.TreeView在设计时设计好结点的组织结构 要建立如下图所示的树形结构可按以下步骤进行: (1)向窗体添加一个TreeView控件,名为TreeView1以及

vs2010中vb 中的 treeview 控件

问题描述 vs2010中vb 中的 treeview 控件 如何确定当前所选的节点或子点,并在其下创建新的节点或子点? 最好能给我个完成例子.我初学者,谢谢各位大侠!!!! 解决方案 添加父节点 TreeView1.Nodes.Add(new TreeNode(reader[1].ToString(),reader[0].ToString())); using (SqlConnection mycon = new SqlConnection(sqlstr)) { mycon.Open(); Sq

vb treeview-vb中treeview控件的使用

问题描述 vb中treeview控件的使用 在vb中,treeview控件与数据库连接出错.在左边点击treeview的子节点,在右边的文本框中不显示相应内容,这是为什么?望高手帮忙解答一下,有什么解决办法,我很着急要呢,谢谢啦!

创建可编辑的xml文档(之五)执行中的treeview 控件

treeview|xml|创建|控件|执行 执行中的treeview 控件  为了更完美,列表4包含了VB.NET version, or C# version 两个版本的最终treevie 控件.为了更容易使用,我重新定义了结构和代码.同时增加了KeyDown 控制来支持一些默认的快捷键例如:Control-N (新建), F2 (编辑), 和DEL (删除).  这里好象不必附加任何事件,因此最终的api 包含一个方法和八个属性,他们在表1中列出来了,他们大多数都是简单的标志,或者默认的开关

ASP.NET中TreeView控件使用小结

asp.net|treeview|控件 中国IT动力,最新最全的IT技术教程最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论 ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql 服务器 Win2000

TreeView控件的使用

说在前面 好多网友来信要求我们写一些 ActiveX 控件的文章,其实对此我们早有计划.记得去年我们筹划 BOE 工作时的时候,小李就写好了一篇关于 ListView 的文章,十分不幸的是小李的机器遭黑客攻击,这篇文章丢失了:这阵子小李又要应付一场考试,没有空闲撰写文章.于是我就勉为其难,代替小李完成 TreeView 控件的介绍,以后有关 ActiveX 的内容仍有小李负责. ActiveX 是扩展应用程序功能的重要手段,但市面上有关 Visual FoxPro 与 ActiveX 控件的介绍

如何重写treeview控件

问题描述 当treeview控件的节点被选中时为蓝底白字,当treeview失去焦点时该节点时为灰底黑字,我想将该灰色改为别的颜色,而且此颜色又不是treeview的属性.请问该如何重写treeview控件呢? 解决方案 解决方案二:没必要重写啊,这些都有自带属性的吧..TreeView的BackColor就是设置它的背景色,如图第二个已经设置背景为番茄红,节点的颜色也是可以自己设置的,BackColor和ForeColor属性.解决方案三:引用1楼hironpan的回复: 没必要重写啊,这些都

TreeView控件递归调用access数据库的问题

问题描述 小弟刚开始接触vb.net,现在有个winform程序要写,100分相赠,望高手帮助--access数据库中的一张表,叫unit,表里就3列,分别是ID,Name,ParentID:1,XXX,02,YYY,03,XX1,14,XX2,15,YY1,26,YY2,27,X1,38,X2,3就是以上这个结构的access数据库,现在需要读取这张表的数据,然后分层的显示在TreeView控件中:XXX--XX1----X1----X2--XX2YYY--YY1--YY2如同以上的表现方式,