vb.net - 如何将这个函数放在一个单独的线程中

标签 vb.net multithreading visual-studio backgroundworker

我的表单需要一点(或很大)的帮助:我需要在单独的线程中使用“组织功能”区域内的所有内容。

我按下表单“开始按钮”区域中的一个按钮来调用“组织功能”子程序的第一个子程序;第一个子调用第二个子,第二个子调用第三个子。

我尝试自己将第三个子组件添加到一个单独的线程中,然后使用第二个子组件将参数传递给线程,但我所做的一切都是错误的。

有人可以帮我做这个吗?

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/

相关文章:

css - 制作 pdf 时无法让 CSS 在 iTextSharp (5.4.3) 中工作

c# - 在 c# web 服务中超时的锁

c# - 当控制台输出重定向到文本框时发生跨线程操作

c++ - 如何在命令行中编译和链接项目?

javascript - 用于开源 NativeScript 的 AppBuilder VS 插件

asp.net - 我如何查看我的 Visual Basic 项目?

jquery - 从代码隐藏执行与类关联的 jQuery 对话框

vb.net - "The mapping of CLR type to EDM type is ambiguous"仅具有一种 EF 模型

c++ - C++使用参数创建线程函数会导致转换错误

c++ - EscapeXML C++ Visual Studio