這里介紹VB.NET多線程的優(yōu)點:可以及時響應(yīng)用戶的操作,,可使軟件的性能提高。VB.NET多線程的編寫:結(jié)構(gòu)合理,、注意同步。
VB.NET有很多值得學(xué)習(xí)的地方,,這里我們主要介紹VB.NET多線程,,包括介紹功能和實現(xiàn)等方面。
功能:把選定文件夾下的dll,、子文件夾和子文件夾中的dll填寫到窗體的treeview控件上,。缺點:窗體簡單,代碼有些混亂,,線程之間的調(diào)用可能沒有到最優(yōu)化,。
實現(xiàn):imagelist中的圖片需要自己重新定義。
VB.NET多線程的優(yōu)點:可以及時響應(yīng)用戶的操作,,不至于產(chǎn)生“未響應(yīng)”的尷尬,;設(shè)計合理(結(jié)合需求)的話,可使軟件的性能提高,。VB.NET多線程的編寫:結(jié)構(gòu)合理,、注意同步。
以上是我對這個例程和VB.NET多線程的個人體會,,如有不妥之處,,還請大家批評指正。
- Imports System.IO
- Public Class Form1
- Inherits System.Windows.Forms.Form
-
- #Region " Windows 窗體設(shè)計器生成的代碼 "
-
- Public Sub New()
- MyBase.New()
- '該調(diào)用是 Windows 窗體設(shè)計器所必需的。
- InitializeComponent()
- '在 InitializeComponent() 調(diào)用之后添加任何初始化
- 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 窗體設(shè)計器所必需的
- Private components As System.ComponentModel.IContainer
-
- '注意: 以下過程是 Windows 窗體設(shè)計器所必需的
- '可以使用 Windows 窗體設(shè)計器修改此過程,。
- '不要使用代碼編輯器修改它。
- 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
- MeMe.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)
- nodeTempnodeTemp.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
【編輯推薦】