,VB.net   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,VB.net
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VB.net > 正文
VB.NET中采用多线程填写treeview控件
[文章信息]
作者:yuhq
时间:2005-04-11
出处:blog
责任编辑:方舟
[文章导读]
把选定文件夹下的dll、子文件夹和子文件夹中的dll填写到窗体的treeview控件上
advertisement
热点推荐
· 17日精选 Longhorn系统详细解析(下)
· 如何消除Windows开机错误提示
· PHP开发中文件操作疑难问答
· 腾讯TM2005beta1最新技巧四则
· 体验V5E变幻万千的地形编辑器
[正文]
  功能:把选定文件夹下的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相关内容,VB.net焦点新闻
  • VB.NET中使用Directsound9之简单播放
  • 用Visual Basic.NET编写扑克牌游戏
  • Visual Basic.NET实现双检锁(DCL)模式
  • 浅议Visual Basic.NET中HOOK的应用
  • 用VB.NET结合Excel设计统计生产报表
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,VB.netAdvertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价