Потоковая подпроцедура в модуле, не получающая правильных данных из другой формы - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть ArrayList, который установлен в Friend.Как только я нажимаю кнопку «abc», она добавляется в ArrayList, а затем форма MsgBox выводит счетчик 1 (правильный).

Когда я использую Threadpool для подсчета количества объектов в ArrayList, он всегда возвращает 0.

Пример:

Imports System.Threading

Public Class Form1

    Friend Alphabet As New ArrayList

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Alphabet.Add("abc")
        MessageBox.Show("Main Sub: " & Alphabet.Count().ToString())
        ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf TestIt))
    End Sub

End Class

Module MyModule
    Public Sub TestIt()
        MessageBox.Show("Threaded Sub: " & Form1.Alphabet.Count().ToString())
    End Sub
End Module

Я, очевидно, получаю здесь какую-то проблему с несколькими потоками, но не знаю, как это исправить.Я обычно просто настраиваю отдельные темы, так что я впервые играю с ThreadPool и уже проиграл на шаге 1!

1 Ответ

1 голос
/ 03 февраля 2012

Когда вы QueueUseWorkItem , вы можете передать объект. Тогда ваш метод будет иметь только один параметр типа объекта. Это позволит вам отправить объект во время события, поскольку поток может работать в любое время.

...