1

バックグラウンド スレッドで順次サブ プロシージャを実行しようとしています。バックグラウンドワーカーを作成してから、各プロシージャを個別に呼び出すことで、そのようにすることが許されるかどうか疑問に思っています...

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

Procedure1()
Procedure2()
Procedure3()

End Sub

これにより、バックグラウンド スレッドで各手順が実行されますか?

また、他の投稿を読んで、 a を使用して C# にList<svnCommand>渡すことを提案した人もいれば、メソッドを使用することを提案した人もいましたが、どちらも私にはわかりません。これら 2 つの機能のいずれかが動作しますか?それらは何ですか?RunWorkerAsyncTasks

4

2 に答える 2

2

理解した。

完全性と参照のために、これを行うには 2 つの方法があります。BackgroundWorker DoWork1 つは、次のようにサブルーチンを呼び出すことです。

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

もう1つは、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 に答える