DOBON.NET DOBON.NETプログラミング掲示板過去ログ

マルチスレッドにて処理途中で全スレッドをアボートさせたい

環境/言語:[WindowsXP/VB.NET]
分類:[.NET]

このたび、VB.NETでマルチスレッドを初体験しております。
そこで、以下の問題が生じましたので、もし分かる方がいらっしゃいましたら、ご教授をお願い致します。

問題点:開始ボタンで、マルチスレッドを開始し、停止ボタンが押された場合、処理の途中であっても、全スレッドを終了させたいのですが、記述方法がヘルプを読みましても分かりません。

使用コントロール リストボックス1、ボタン1、ボタン2
以下ソース−−−−−−−−−−−−−−−−−−

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
 省略
#End Region

Public TestThread As New TestThreadClass

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'開始
Dim i As Integer
For i = 1 To 3
Dim TestThread As New TestThreadClass
Dim otter As New System.Threading.ThreadStart(AddressOf TestThread.MainThread)
Dim oThread As New System.Threading.Thread(otter)
AddHandler TestThread.TestEvent, AddressOf TestDoneHandler
TestThread.lngCount = i * 3
oThread.Start()
Next
End Sub
Protected Sub TestDoneHandler(ByVal lngValue As Long)
ListBox1.Items.Add(CStr(lngValue))
End Sub
Class TestThreadClass
Public Event TestEvent(ByVal lngValue As Long)
Public lngCount As Long
Sub MainThread()
Dim lngValue As Long
Dim i As Integer
For i = 1 To lngCount * 50000000
lngValue = lngValue + i
Next
RaiseEvent TestEvent(lngValue)
End Sub
End Class

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'停止
'?
End Sub
End Class

ここまで−−−−−−−−−−−−−−−−−−

根本的に誤っているかもしれませんが、よろしくお願い致します。
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> '開始
> Dim i As Integer
> For i = 1 To 3
> Dim TestThread As New TestThreadClass
> Dim otter As New System.Threading.ThreadStart(AddressOf TestThread.MainThread)
> Dim oThread As New System.Threading.Thread(otter)
> AddHandler TestThread.TestEvent, AddressOf TestDoneHandler
> TestThread.lngCount = i * 3
> oThread.Start()
> Next
> End Sub

ここで作成したThreadのインスタンスをPrivateなThread型の配列変数で保持しておいて、

> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> '停止
> '?

ここで保持しておいたThreadの配列変数を介して、Abortメソッドを呼んでやればいいと思います。

> End Sub
> End Class
よねKEN様へ
 ありがとうございました。おかげさまで解決できました。
 スレッド自身を配列で保持するとは大変勉強になりました。
 今後は極力自己解決するよう努力いたします。

掲示板関係者の方及び、質問を見ていただいたかたにも
お礼申し上げます。

以下追加コード
Private SvThread(2) As System.Threading.Thread

ボタン1
SvThread(i-1) = oThread
oThread.Start()

ボタン2
Dim i As Integer
For i = 1 To 3
SvThread(i-1).Abort()
Next

以上。解決致しました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板