作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的表单需要一点(或很大)的帮助:我需要在单独的线程中使用“组织功能”区域内的所有内容。
我按下表单“开始按钮”区域中的一个按钮来调用“组织功能”子程序的第一个子程序;第一个子调用第二个子,第二个子调用第三个子。
我尝试自己将第三个子组件添加到一个单独的线程中,然后使用第二个子组件将参数传递给线程,但我所做的一切都是错误的。
有人可以帮我做这个吗?
PS:为了方便大家查看,我删除了表格中不重要的部分。
感谢阅读。
Public Class Form1
#Region "Declarations"
' MediaInfo
Dim MI As MediaInfo
' Thread
Dim paused As Boolean = False
' Others
Dim NameOfDirectory As String = Nothing
Dim aFile As FileInfo
#End Region
'thread
Dim t As New Thread(AddressOf ThreadProc)
Public Sub ThreadProc()
' Aqui debería ir todo el sub de "organize function", bueno... son 3 subs!
If paused = True Then MsgBox("THREAD PAUSADO")
End Sub
#Region "Properties"
...
#End Region
#Region "Load / Close"
...
#End Region
#Region "Get Total files Function"
...
#End Region
#Region "Option checkboxes"
...
#End Region
#Region "Folder buttons"
...
#End Region
#Region "Append text function"
...
#End Region
#Region "Action buttons"
' pause button
Private Sub pause_button_Click(sender As Object, e As EventArgs) Handles pause_button.Click
paused = True
End Sub
' start button
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles start_button.Click
t.Start()
' Organization process
NameOfDirectory = userSelectedFolderPath
MediaInfo(NameOfDirectory)
End Sub
#End region
#Region "Organize function"
Public Sub MediaInfo(Directory)
Dim MyDirectory As DirectoryInfo
MyDirectory = New DirectoryInfo(NameOfDirectory)
MediaInfoWorkWithDirectory(MyDirectory)
End Sub
Public Sub MediaInfoWorkWithDirectory(ByVal aDir As DirectoryInfo)
Dim nextDir As DirectoryInfo
MediaInfoWorkWithFilesInDir(aDir)
For Each nextDir In aDir.GetDirectories
Using writer As StreamWriter = New StreamWriter(aDir.FullName & "\" & nextDir.Name & "\" & nextDir.Name & ".m3u", False, System.Text.Encoding.UTF8)
'overwrite existing playlist
End Using
MediaInfoWorkWithDirectory(nextDir)
Next
End Sub
Public Sub MediaInfoWorkWithFilesInDir(ByVal aDir As DirectoryInfo)
Dim aFile As FileInfo
For Each aFile In aDir.GetFiles()
' hacer cosas con aFile ...
Next
End Sub
#End Region
End Class
最佳答案
有一个名为 BackgroundWorker 的 Windows 窗体组件,专门设计用于将长时间运行的任务从 UI 线程卸载到后台线程,让您的窗体保持良好的响应速度。
BackgroundWorker 组件有一个名为 DoWork 的事件,用于在单独的线程上执行代码。将 BackgroundWorker 组件拖到您的表单上,然后执行如下操作:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles start_button.Click
NameOfDirectory = userSelectedFolderPath
backgroundWorker1.RunWorkerAsync(NameOfDirectory)
End Sub
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim directoryName as string = e.Argument
MediaInfo(directoryName)
End Sub
两个可能有用的链接是 MSDN BackgroundWorker Code Project 上的页面和示例.
HTH
关于vb.net - 如何将这个函数放在一个单独的线程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13603606/
我是一名优秀的程序员,十分优秀!