この質問と重複する質問はたくさんありますが、実際に私の特定の問題に答えているものはありません。
IRC ボットを作成しています。以下のコードでわかるように、ユーザーを List(Of String) に追加しています。ただし、別のスレッドでユーザーの foreach ループを実行したい場合、タイトルにエラーが表示されます。ユーザーの追加を停止するためにブール値を配置しましたが、何らかの形で変更されているとまだ言われています。どんな助けでも大歓迎です。
(コードを読む前に、私は VB.net を初めて使用することを覚えておいてください。たとえそれが乱雑であっても、私は初心者なので、それで非難されたくありません)
Sub Handler()
handlerActive = True
Dim list As New List(Of String)
query = "SELECT * FROM " & channel.Substring(1)
Try
connHost.Close()
Catch
End Try
connHost.Open()
Dim cmd As MySqlCommand = New MySqlCommand(query, connHost)
Dim dataReader As MySqlDataReader = cmd.ExecuteReader()
While (dataReader.Read())
list.Add(dataReader.GetString(1))
End While
dataReader.Close()
If (users.Count > 0) Then
For Each user2 In users
Try
connHost.Close()
Catch ex As Exception
End Try
connHost.Open()
query = ("UPDATE `" & channel.Substring(1) & "` SET `Amount` = Amount + 1 WHERE `Username`='" & user2 & "'")
cmd = New MySqlCommand(query, connHost)
Try
cmd.ExecuteNonQuery()
Catch
Console.WriteLine("Failed to update user - " & user2)
End Try
Next
End If
connHost.Close()
handlerActive = False
End Sub
以下は、「users」という名前のリストにユーザーを追加する場所です
If (handlerActive = False And users.Contains(user) = False And user.Trim().CompareTo("") <> 0 Or user.Trim().CompareTo("jtv") <> 0 Or user.Trim().Contains(" ") = False Or user.Trim().Contains(".") = False) Then
users.Add(user)
End If