1

我正在寻找在后台线程中运行顺序子程序。并且想知道是否可以通过创建后台工作人员然后像这样单独调用每个过程来这样做......

Private Sub BGW_DoWork(ByVal sender As System.Object, ByVal e As DoWorkEventArgs) 
_Handles BGW.DoWork

Procedure1()
Procedure2()
Procedure3()

End Sub

这会在后台线程中运行每个过程吗?

另外,阅读其他帖子,有些人建议使用 aList<svnCommand>并将它们传递给RunWorkerAsyncC#,而其他人则建议使用Tasks方法,这两个我都不知道。这两个中的任何一个都可以工作吗?它们是什么?

4

2 回答 2

2

弄清楚了。

为了完整和参考,有两种方法可以做到这一点。一种是通过以下方式调用潜艇BackgroundWorker DoWork

Public Class Form1
    Dim var1 As Integer = 0
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Run background worker
        BackgroundWorker1.RunWorkerAsync()
    End Sub
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        'Run task 1
        Task1_Code()
        'Run task 2
        Task2_Code()
        'Show variable
        MessageBox.Show(var1)
    End Sub
    Sub Task1_Code()
        'Wait 10 seconds
        Threading.Thread.Sleep(10000)
        'Sets var1 to 5
        var1 = 5
    End Sub
    Sub Task2_Code()
        'Wait 10 seconds
        Threading.Thread.Sleep(10000)
        'Same as var1= var1*5
        var1 *= 5
    End Sub
End Class

另一种是使用Task类。

Imports System.Threading.Tasks

Public Class Form1
    Dim var1 As Integer = 0
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'Dim the task list and start excecuting
        Dim task1 As task = Task.Factory.StartNew(AddressOf Task1_Code).ContinueWith(AddressOf Task2_Code)
        'Waits for tasks to complete within 90 seconds or less
        task1.Wait(90000)
        'Shows variable
        MessageBox.Show(var1)
    End Sub
    Sub Task1_Code()
        'Wait 10 second
        Threading.Thread.Sleep(10000)
        'Sets var1 to 5
        var1 = 5
    End Sub
    Sub Task2_Code()
        'Wait 10 second
        Threading.Thread.Sleep(10000)
        'Same as var1= var1*5
        var1 *= 5
    End Sub
End Class

有关任务的更多信息,请参阅关于使用 vb.net 的顺序任务的帖子。

于 2013-07-22T05:05:03.750 回答
2

不,没有必要将每个子例程放在其自己的 BackgroundWorker 中。我经常从我的 DoWork 处理程序中调用多个子例程。从该处理程序调用的任何子例程都将在后台线程中执行。

于 2013-07-22T04:15:36.237 回答