资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> 其他编程 >> VB编程 >> 文档正文
最近更新
普通文档 定时提醒你休息的脚本
普通文档 用VB备份和恢复SQL Serv
普通文档 利用Visual Basic开发SA
普通文档 用DirectShow实现QQ的音
普通文档 Visual Basic数据库操作
普通文档 在VB中存取数据库中的图
普通文档 VB实现图像在数据库的存
普通文档 在VB中用DAO实现数据库编
普通文档 VB实现SQL Server 2000存
普通文档 基于Visual Basic 6的网
推荐文章
  • 此栏目下没有推荐文档
  • VB.NET中采用多线程填写treeview控件

    文章作者:佚名 录入时间:2006-6-2 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


    功能:把选定文件夹下的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
      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中采用多线程填写treeview控件”的内容  
    相关连接
  • 将Java程序变成Windows系统服务

  • 浅析Java多线程程序设计机制

  • Java初学者需掌握的30个基本概念(1)

  • JDBC 入门(1)

  • 面向Java程序员的Ajax:构建动态Java程序(1)