我正在研究掃描用戶定義的目錄並提取所有文件擴展名的實用程序。
在下面提到的按鈕事件中,我開始執行所有掃描的線程,但是我希望代碼在'A點'暫停或停止,直到該線程完成其工作,而現在它啓動線程並在'A點'。如何停止代碼繼續?當線程啓動時掛起其他線程Vb.Net
Private Sub Btn_Extract_Click(sender As Object, e As EventArgs) Handles Btn_Extract.Click
Dim eventobject As New EventsandFunctions
eventobject.FilesCounter = 0
eventobject.DirectoryCounter = 0
AddHandler eventobject.FilesScanned, AddressOf eventobject.FilesScannedCounterIncrease
AddHandler eventobject.DirectoryScanned, AddressOf eventobject.DirectoryScannedCounterIncrease
If TxtB_SaveFilePath.Text = Nothing Or TxtBx_DirectoryToScan.Text = Nothing Then
MessageBox.Show("Scan Path, Output File Path or Both Missing", "Error")
Else
ThreadFileScanning.Start(eventobject) 'Thread Starts here--<Point A>
If ChckB_RemoveDot.Checked Then
eventobject.WriteExtentionsToFileWithoutDot(TxtB_SaveFilePath.Text)
Else
eventobject.WriteExtentionsToFile(TxtB_SaveFilePath.Text)
End If
MessageBox.Show("Operation Completed Successfully." & vbCrLf & vbCrLf & "Total Directory Scanned: " & eventobject.DirectoryCounter & vbCrLf & "Total Files Scanned: " & eventobject.FilesCounter, "Completion Notification")
Lbl_FileNames.Text = "Scanning & Writing Completed"
End If
Process.Start("notepad.exe", TxtB_SaveFilePath.Text)
End Sub
以下是這就是所謂的線程功能:
Public Sub RecursivelyScanFiles(ByVal Path As String, ByVal ObjectDb As DialogueBox)
If Path <> Nothing Then
For Each File In GetFiles(Path)
If File.Length < 260 Then
If System.IO.Path.HasExtension(File) = True Then
Extentions.Add(System.IO.Path.GetExtension(File).ToLower)
End If
ObjectDb.settext(File) 'Cross-Thread call Through a Delegate
ObjectDb.Refreshlabel() 'Cross-Thread call Through a Delegate
RaiseEvent FilesScanned(Me, EventArgs.Empty)
End If
Next
End If
If Path <> Nothing Then
For Each SubDir In GetDirectories(Path)
If SubDir.Length < 248 Then
Try
RaiseEvent DirectoryScanned(Me, EventArgs.Empty)
RecursivelyWriteToFile(SubDir, ObjectDb)
Catch ex As UnauthorizedAccessException
Continue For
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
Next
End If
End Sub
你在問錯誤的問題,代碼有太多的問題需要刺探答案。使用BackgroundWorker類可避免發生最基本的錯誤,其RunWorkerCompleted和ProgressChanged事件可幫助您陷入成功之坑。 – 2014-09-24 15:09:36
我在MSDN上閱讀了關於BackgroundWorker的內容,但我認爲使用委託更容易。你建議BackgroundWorker? – Rehan 2014-09-24 15:13:04
我同意@HansPassant。在可能的情況下,應該使用後臺工作者,但由於線程問題,我已經給出了一個應該與線程一起工作的答案(如果我正確理解問題) – Grahamvs 2014-09-24 15:23:14