动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   .Net → 阅读文章

 VB.NET中采用多线程填写treeview控件

作者来源: 
阅读 数 656 人次 , 2006-4-20 9:23:00 


  功能:把选定文件夹下的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窗体和新的IDE
· 下一篇:VB.net中访问存储过程的几种办法
· 五种常见的ASP.NET安全缺陷
· 一个数据库操作类的实例(一.Command类部分)
· 详解对密码执行散列和 salt 运算方法
· .NET中各种数据库连接大全
· Jsp问答集一


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077