首页 >> VB.Net >> 正文
VB.NET中采用多线程填写treeview控件-VB.NET
来源:Dotnet频道 作者:采集 时间:2008-3-31

  功能:把选定文件夹下的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
相关新闻
相关评论
 
评论表单加载中...
 
VB.Net文章

 在Visual C++应

 编辑:admin

 时间:2008-3-10


   .NET Framework 中多语言支持的实现-.NET Framework
   将Eiffel系统集成到.NET Framework中-.NET Framework
   04年五种常用RAD的测验比较(1)-.NET Framework
   04年五种常用RAD的测验比较(2)-.NET Framework
   04年五种常用RAD的测验比较(3)-.NET Framework
最新文章
   .NET Framework 中多语言支持的实现-.NET Framework
   将Eiffel系统集成到.NET Framework中-.NET Framework
   04年五种常用RAD的测验比较(1)-.NET Framework
   04年五种常用RAD的测验比较(2)-.NET Framework
   04年五种常用RAD的测验比较(3)-.NET Framework
总站搜索
搜索
 
热门文章
   oracle数据库文件中的导入\导出
   用Oracle10g列值掩码技术隐藏敏感数据
   VB程序中用ADO对象动态创建数据库和表-VB.NET
   用VB6写简单程序 让电骡自动关机-VB.NET
   使用.NET2.0编写COM组件供VB调用-VB.NET
   VB.NET:键盘控制焦点移动-VB.NET
   用VB.NET绘制GDI图形-VB.NET
   vb.net中应用 ArrayList 实例-VB.NET
 
推荐文章
ASP.NET中的状态管理-ASP.NET
VC、IE、ASP环境下打印、预备的完美解决方案
oracle数据库文件中的导入\导出
VB.NET中快速访问注册表技巧-VB.NET
在vb中实现超连接的方法!和直接发邮件-VB.NET
用VB做realplayer播放列表-VB.NET
在VB.NET中如何实现和利用SortedLists-VB.NET
利用VB.NET Stopwatch对象记录时间-VB.NET
成都古羌科技有限公司版权所有: Copyright@2007-2010 ,ALL Rights Reserved 蜀ICP备07017240号