vbでマルチスレッドしてみる

また既出ネタでしかもlinuxすら関係ないですがw

ツールボックスからBackgroundWorkerをフォームに追加すると使用準備は終了。ほんとうに簡単ですね。
別スレッドを開始するには、BackgroundWorker.RunWorkerAsync()と記述すればよく、注意する点は呼び出すスレッド(BackgroundWorker)が何番なのか把握することです。単純に一つスレッドを増やすだけならBackgroundWorker1がデフォルトですから、BackgroundWorker1.RunWorkerAsync()とすればいいわけです。
backgroundworker_DoWorkでマルチスレッドで実行する処理のようです。
backgroundworker_RunWorkerCompletedでマルチスレッド終了処理をするようです。理解はしきっていませんので。
使えればいいですから理解は二の次なのですよ。
多分ですが、backgroundworker_DoWorkでわざわざ関数を呼び出さなくても、backgroundworker_DoWorkのなかで処理をしてやればよいかと。

以下、サンプル。

Public Class Form1
Dim work As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
work = 0
'別スレッド開始
BackgroundWorker1.RunWorkerAsync()
TextBox2.Text = "演算を開始しました..."
TextBox1.Text = "演算を開始します..."
Dim a As Single = 0
For i = 0 To 1000
a = Math.Sin(2 * Math.PI * i / 1000)
Next
TextBox1.Text &= "演算完了!"
End Sub
Private Sub backgroundworker_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

' BackgroundWorkerの取得(スレッドを作成したオブジェクト)
Dim objWorker As System.ComponentModel.BackgroundWorker = _
CType(sender, System.ComponentModel.BackgroundWorker)
' 時間のかかる裏で動かしたい処理
e.Result = CountThread(objWorker, e)
End Sub
Private Function CountThread(ByVal worker As System.ComponentModel.BackgroundWorker, _
ByVal e As System.ComponentModel.DoWorkEventArgs) As Long
Dim result As Integer = 0

Dim a As Single = 0
For i = 0 To 1000000
a = Math.Sin(2 * Math.PI * i / 1000)
Next

Return result
End Function
Private Sub backgroundworker_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted

' 最初に、例外がスローされた場合の処理
If Not (e.Error Is Nothing) Then
MessageBox.Show(e.Error.Message)
ElseIf e.Cancelled Then
' 次に、ユーザーが計算をキャンセルした場合の処理

Else
' 正常に完了した場合の処理
work = 1
TextBox2.Text &= "演算完了!"
End If
End Sub
End Class