⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmexample2.vb

📁 清华大学出版社出版的 移动应用开发宝典 张大威(2008)的附书源代码
💻 VB
字号:
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Diagnostics
Imports System.Collections
Imports System.IO
Imports System.Threading

Namespace CodeForChapter11cs
  Public Partial Class frmExample2
	  Inherits Form
	Public Sub New()
	  InitializeComponent()
	End Sub

	Private allFiles As ArrayList = New ArrayList() ' holds the results
	Private stopRequested As Boolean = False ' user hit the cancel button

	Private Sub menuItem2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuItem2.Click
	  ' cancel
	  stopRequested = True
	End Sub

	' re-write this menu click event handler method
	Private Sub menuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuItem1.Click
	  ' load list
	  label1.Text = ""
	  listBox1.DataSource = Nothing
	  stopRequested = False

	  Dim t As Thread = New Thread(AddressOf Me.GetAllFiles) 'delegate inference
	  t.Name = "Worker: allFiles populator"
	  t.Start()
	End Sub

	'... extracted form menu event hnadler and is now Control Invoked
	Private Sub UpdateBox(ByVal sender As Object, ByVal e As EventArgs)
	  label1.Text = allFiles.Count.ToString()
	  listBox1.DataSource = allFiles
	  Debug.WriteLine("Got results " & listBox1.Items.Count.ToString())
	End Sub

	Private Sub GetAllFiles()
	  allFiles.Clear()
	  Me.PopulateAllFilesFor("\")
	  Debug.WriteLine("Finished")

	  Me.Invoke(New EventHandler(AddressOf Me.UpdateBox)) 'at the end, update the UI
	End Sub

	Private Sub PopulateAllFilesFor(ByVal path As String)
	  If stopRequested Then
		Debug.WriteLine("cancelled 1")
		Return
	  End If
	  Debug.WriteLine("Processing new path")

	  allFiles.Add(path)

	  Dim files As String()
	  files = Directory.GetFiles(path)
	  allFiles.AddRange(files)

	  Debug.WriteLine(allFiles.Count.ToString())

	  ' replaces previously commented out line
	  Me.Invoke(New EventHandler(Of LabelEventArgs)(AddressOf UpdateLabel), New Object(){label1, New LabelEventArgs(allFiles.Count)})


	  If stopRequested Then
		Debug.WriteLine("cancelled 2")
		Return
	  End If

	  For Each subDirectory As String In Directory.GetDirectories(path)
		Me.PopulateAllFilesFor(subDirectory) 'recursion
		If stopRequested Then
		  Debug.WriteLine("cancelled 3")
		  Return
		End If
	  Next subDirectory
	End Sub

	#Region "Supports Control.Invoke"
	' Could have used delegate with int parameter but best follow the .NET pattern of having an EventArgs class
	Private Class LabelEventArgs
		Inherits EventArgs
	  Public Sub New(ByVal items As Integer)
		NumberOfItems = items
	  End Sub
	  Public NumberOfItems As Integer
	End Class

	Private Sub UpdateLabel(ByVal sender As Object, ByVal e As LabelEventArgs)
	  label1.Text = e.NumberOfItems.ToString()
	End Sub
	#End Region
  End Class
End Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -