分享

分享个人总结VB.NET多线程

 nxhujiee 2010-04-09
  • 分享个人总结VB.NET多线程

    这里介绍VB.NET多线程的优点:可以及时响应用户的操作,可使软件的性能提高。VB.NET多线程的编写:结构合理、注意同步。

    VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET多线程,包括介绍功能和实现等方面。
    功能:把选定文件夹下的dll、子文件夹和子文件夹中的dll填写到窗体的treeview控件上。缺点:窗体简单,代码有些混乱,线程之间的调用可能没有到最优化。
    实现:imagelist中的图片需要自己重新定义。

    VB.NET多线程的优点:可以及时响应用户的操作,不至于产生“未响应”的尴尬;设计合理(结合需求)的话,可使软件的性能提高。VB.NET多线程的编写:结构合理、注意同步。

    以上是我对这个例程和VB.NET多线程的个人体会,如有不妥之处,还请大家批评指正。

            
    1. Imports System.IO  
    2. Public Class Form1  
    3. Inherits System.Windows.Forms.Form  
    4.  
    5. #Region " Windows 窗体设计器生成的代码 "  
    6.  
    7. Public Sub New()  
    8. MyBase.New()  
    9. '该调用是 Windows 窗体设计器所必需的。  
    10. InitializeComponent()  
    11. '在 InitializeComponent() 调用之后添加任何初始化  
    12. End Sub  
    13.  
    14. '窗体重写 dispose 以清理组件列表。  
    15. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)  
    16. If disposing Then  
    17. If Not (components Is Nothing) Then  
    18. components.Dispose()  
    19. End If  
    20. End If  
    21. MyBase.Dispose(disposing)  
    22. End Sub  
    23.  
    24. 'Windows 窗体设计器所必需的  
    25. Private components As System.ComponentModel.IContainer  
    26.  
    27. '注意: 以下过程是 Windows 窗体设计器所必需的  
    28. '可以使用 Windows 窗体设计器修改此过程。  
    29. '不要使用代码编辑器修改它。  
    30. Friend WithEvents TreeView1 As System.Windows.Forms.TreeView  
    31. Friend WithEvents btnOpenBrower As System.Windows.Forms.Button  
    32. Friend WithEvents ImageList1 As System.Windows.Forms.ImageList  
    33. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  
    34. Me.components = New System.ComponentModel.Container  
    35. Dim resources As System.Resources.ResourceManager = 
      New System.Resources.ResourceManager(GetType(Form1))  
    36. Me.TreeView1 = New System.Windows.Forms.TreeView  
    37. Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)  
    38. Me.btnOpenBrower = New System.Windows.Forms.Button  
    39. Me.SuspendLayout()  
    40.  
    41. 'TreeView1  
    42.  
    43. Me.TreeView1.Dock = System.Windows.Forms.DockStyle.Left  
    44. MeMe.TreeView1.ImageList = Me.ImageList1  
    45. Me.TreeView1.Location = New System.Drawing.Point(0, 0)  
    46. Me.TreeView1.Name = "TreeView1" 
    47. Me.TreeView1.Size = New System.Drawing.Size(376, 581)  
    48. Me.TreeView1.TabIndex = 0 
    49.  
    50. 'ImageList1  
    51.  
    52. Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)  
    53. Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), 
      System.Windows.Forms.ImageListStreamer)  
    54. Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent  
    55.  
    56. 'btnOpenBrower  
    57.  
    58. Me.btnOpenBrower.Location = New System.Drawing.Point(408, 64)  
    59. Me.btnOpenBrower.Name = "btnOpenBrower" 
    60. Me.btnOpenBrower.Size = New System.Drawing.Size(96, 23)  
    61. Me.btnOpenBrower.TabIndex = 1 
    62. Me.btnOpenBrower.Text = "Open Brower" 
    63.  
    64. 'Form1  
    65.  
    66. Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)  
    67. Me.ClientSize = New System.Drawing.Size(536, 581)  
    68. Me.Controls.Add(Me.btnOpenBrower)  
    69. Me.Controls.Add(Me.TreeView1)  
    70. Me.Name = "Form1" 
    71. Me.Text = "Form1" 
    72. Me.ResumeLayout(False)  
    73. End Sub  
    74.  
    75. #End Region  
    76. Private Sub OpenBrower()  
    77. Dim f As New FolderBrowserDialog  
    78. If f.ShowDialog = DialogResult.OK Then  
    79. Me.TreeView1.Nodes.Clear()  
    80. Me.SuspendLayout()  
    81. Dim nodeTemp As TreeNode = CType(Me.Invoke(New AddTreeNodeHandler
      (AddressOf Me.AddFileToTreeview), New Object() {f.SelectedPath}), TreeNode)  
    82. Me.AddFile(New DirectoryInfo(f.SelectedPath), nodeTemp)  
    83. Me.ResumeLayout(False)  
    84. End If  
    85. End Sub  
    86.  
    87. Private Sub AddFile(ByVal dirPath As DirectoryInfo, ByVal node As TreeNode)  
    88. Dim tempHandler As New AddFileHandler(AddressOf Me.AddFileToTreeNode)  
    89. For Each dir As DirectoryInfo In dirPath.GetDirectories()  
    90. Dim nodeTemp As TreeNode = CType(Me.Invoke(tempHandler, 
      New Object() {dir.Name, CLASSIO.Directory, node}), TreeNode)  
    91. Me.AddFile(dir, nodeTemp)  
    92. Next  
    93. For Each file As FileInfo In dirPath.GetFiles("*.dll")  
    94. Me.Invoke(tempHandler, New Object() {file.Name, CLASSIO.File, node})  
    95. Next  
    96. End Sub  
    97.  
    98. Private Function AddFileToTreeNode(ByVal str As String, 
      ByVal cls As CLASSIO, ByVal node As TreeNode) As TreeNode  
    99. Dim nodeTemp As New TreeNode(str)  
    100. nodeTemp.ImageIndex = CInt(cls)  
    101. node.Nodes.Add(nodeTemp)  
    102. nodeTempnodeTemp.SelectedImageIndex = nodeTemp.ImageIndex  
    103. Return nodeTemp  
    104. End Function  
    105.  
    106. Private Function AddFileToTreeview(ByVal str As String) As TreeNode  
    107. Dim nodeTemp As New TreeNode(str)  
    108. Me.TreeView1.Nodes.Add(nodeTemp)  
    109. Return nodeTemp  
    110. nodeTemp.SelectedImageIndex = CInt(CLASSIO.Directory)  
    111. End Function  
    112.  
    113. Private Sub btnOpenBrower_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) Handles btnOpenBrower.Click  
    114. '多线程  
    115. Dim t As Threading.Thread = New Threading.Thread(AddressOf Me.OpenBrower)  
    116. t.Start()  
    117.  
    118. '单线程  
    119. 'Me.OpenBrower()  
    120. End Sub  
    121. End Class  
    122.  
    123. Public Enum CLASSIO  
    124. File = 1 
    125. Directory = 0 
    126. End Enum  
    127.  
    128. Public Delegate Function AddFileHandler(ByVal str As String, 
      ByVal cls As CLASSIO, ByVal Node As TreeNode) As TreeNode  
    129. Public Delegate Function AddTreeNodeHandler(ByVal str As String) As TreeNode 

    【编辑推荐】

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多