none
Обращение к форме из одного из элементов массива BackgroundWorker RRS feed

  • Вопрос

  • Всем привет! Есть класс-наследник BackgroundWorker:
    Public Class WebRipper : Inherits BackgroundWorker
    
        Dim Index As Integer
        Sub New(SessionId As Integer)
            Index = SessionId
        End Sub
    
        Sub Start(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles Me.DoWork
    		Dim tst = sender.TextBox1.Text
    		Dim p As New ProcessStartInfo
    		p.FileName = "RunProject.exe"
    		p.Arguments = "Process.exe -password_id " + Form1.TextBox1.Text '<= ПРОБЛЕМА ЗДЕСЬ! Не получается обратиться к Form1!
    		Dim aroras As Process = Process.Start(p)
    		aroras.WaitForExit()
        End Sub
    
        Private Sub Finish(sender As WebRipper, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Me.RunWorkerCompleted
            Me.RunWorkerAsync()
        End Sub
    
    End Class
    

    На форме объявлена его коллекция и каждый элемент запускается с помощью RunWorkAsync().

    Public Class Form1
        Dim ThreadNum = 10
        Public WR(ThreadNum) As WebRipper
        Dim Started As DateTime
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            For i As Integer = 0 To ThreadNum - 1
                WR(i) = New WebRipper(i)
                WR(i).RunWorkerAsync()
            Next
        End Sub
    
        Sub WRCompleted(sender As WebRipper, e As System.ComponentModel.RunWorkerCompletedEventArgs)
            sender.RunWorkerAsync()
        End Sub
    
    End Class
    

    Проблема в том, что не получается обратиться к форме из WebRipper (см.коммент в первом листинге). Т.е. при выполнении кода Form1.TextBox1.Text возвращается пустая строка (не отваливается, идет дальше), а при разглядывании вотчером пишет:
    Form1.TextBox1.Text Reference to a non-shared member requires an object reference.
    15 августа 2013 г. 8:02

Ответы