vb .net контроль формы доступа в задаче

Я пытаюсь получить доступ к данным из текстовых полей и флажков, размещенных в форме 1, в задаче, запущенной в форме 2.

Когда я получаю доступ к текстовым полям и флажкам в задаче, запущенной в подразделе form1, все работает нормально! Но если я попытаюсь использовать данные из элементов управления в задаче form2, я получу только текст по умолчанию (пустой) текстового поля и статус проверки по умолчанию

Следующий testsub работает с form1, и отображается правильный текст.

Public Sub testsub()
    Dim testTask As New Task(Sub() MsgBox(TextBox1.Text))
    testTask.Start()
End Sub

На form2 я пробовал это

Public Sub testsub()
    Dim testTask As New Task(Sub() MsgBox(Form1.TextBox1.Text))
    testTask.Start()
End Sub

Это не работает, и отображается только пустое текстовое поле. Похоже стандартный экземпляр формы1 недоступен в задаче формы2?! Это правильно?

Итак, как я могу получить доступ к управляющим данным формы 1 в задаче формы 2?


person Martin    schedule 14.08.2014    source источник
comment
Возможность использовать имя типа, например Form1, где требуется ссылка на объект, удобна для переноса программ VB6 на VB.NET. Однако если вы делаете это в потоке, это смертельно опасно, вы получаете новый экземпляр класса Form1.   -  person Hans Passant    schedule 14.08.2014


Ответы (1)


Вам нужно, чтобы ваш экземпляр Form1 был объявлен в месте, где Form2 может получить к нему доступ.

Попробуйте добавить модуль:

Module Mod1
    Public f1 as Form1

End Module

Затем в событии Form1 Load установите f1 на экземпляр Form1.

f1 = Me

После того, как Form1 будет загружен, в Form2 вы можете использовать свою подпрограмму, заменив общую форму Form1 на конкретную f1.

Public Sub testsub()
    Dim testTask As New Task(Sub() MsgBox(f1.TextBox1.Text))
    testTask.Start()
End Sub
person Andy M    schedule 14.08.2014