具有返回值的多线程:vb.net

 乐在TV 发布于 2022-12-20 18:09

我创建了一个列表,threads以实现Multi Threading全部接受一个返回值的函数。以下是我尝试过的代码:

创建线程

  Dim txt as String
  For i As Integer = 0 To 15
      txt = ""
      txt = UCase(array.Item(i))
      Dim tempThread As Threading.Thread = New Threading.Thread(AddressOf threadRead)
      tempThread .Start(txt) ' start thread by passing value to it
      Threads.Add(tempThread ) 'Add thread to the list
      'Here i want to add the return value from the thread to RichTextbox
      'as follows
      RichTextBox1.Text = RichTextBox1.Text & vbNewLine & tempThread.ReturnValue
  Next

线程处理的功能

  Public Function threadRead(ByVal txtInput As String) As String
       Dim stroutput As String = ""
       ' Some operations are performed here
       Return stroutput
  End Function

所以问题是我无法从被调用的函数访问返回值。谁能建议我一些实现这一目标的方法?

提前致谢

1 个回答
  • 我认为,最简单的方法是使用名为a的辅助对象BackgroundWorker。您可以在此处找到MSDN文档。

    以下是使用方法的示例:

    Private Sub RunFifteenThreads()
       For i As Integer = 1 To 15
          Dim some_data As Integer = i
          Dim worker As New System.ComponentModel.BackgroundWorker
          AddHandler worker.DoWork, AddressOf RunOneThread
          AddHandler worker.RunWorkerCompleted, AddressOf HandleThreadCompletion
          worker.RunWorkerAsync(some_data)
       Next
    End Sub
    
    Private Sub RunOneThread(ByVal sender As System.Object, _
                             ByVal e As System.ComponentModel.DoWorkEventArgs)
       Dim stroutput As String = e.Argument.ToString
       ' Do whatever else the thread needs to do here...
       e.Result = stroutput
    End Sub
    
    Private Sub HandleThreadCompletion(ByVal sender As Object, _
                                       ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
       Dim return_value As String = e.Result.ToString
       RichTextBox1.Text = RichTextBox1.Text & vbNewLine & return_value
    End Sub
    

    每个辅助对象都管理自己的线程。调用工作程序的RunWorkerAsync方法将创建一个新线程,然后引发一个DoWork事件。处理该DoWork事件的函数在工作程序创建的线程中执行。该功能完成后,工作人员将引发一个RunWorkerCompleted事件。处理该RunWorkerCompleted事件的函数在原始线程(称为)中执行RunWorkerAsync

    要在线程之间传递数据,请e在事件处理程序中使用EventArgs参数(在上面的示例中)。您可以将单个参数传递给RunWorkerAsync,通过可以将其提供给新线程e.Argument。要从工作线程向主线程发送另一个方向的数据,您可以e.Result在工作线程中设置的值,然后将该值传递给处理线程完成的函数(也称为)e.Result

    您还可以在工作线程仍在执行时,使用ReportProgress和在线程之间发送数据ProgressChanged(如果有兴趣,请参见MSDN文档)。

    2022-12-20 18:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有