Создайте внутри этого класса класс под названием Elab, поместите подзаголовок под названием work Добавьте в форму таймер, который отключен
с тиком, скажем, 1000
Объявите это в своем классе формы:
Dim El as Elab
внутри Form_Load () поместите:
El = New Elab()
Под вашей кнопкой поместите это:
Dim gThread as new System.Threading.Thread(Address of El.Work)
Timer1.Enabled = True
Внутри Elab объявите переменную с именем Result:
Public Result as boolean
Когда elab завершит все, что делает, установите для результата значение true и сохраните результаты в общедоступных переменных, к которым вы сможете получить доступ позже.
Внутри таймера:
If El.Result = True then
'Get results, deal with data
end if
Это написано не очень хорошо и не является рабочим примером, но просто указывает вам в правильном направлении, давая потоку адрес подпрограммы внутри класса, вы затем можете получить доступ к тому же классу из других потоков. , что означает, что ваша форма не зависает, и вы не создаете новый экземпляр вашей формы, вы просто обращаетесь к подпрограмме существующих классов; просто убедитесь, что у вас есть способ получить результаты (в этом примере я предложил таймер, но кнопка «получить результат» будет выполнять ту же работу) после завершения потока.
Помните: если вам нужно, чтобы Elab завершил работу до того, как можно будет продолжить определенную часть кода (например, elab может добавить два числа, и вам нужен результат для продолжения), вы можете запустить поток и сделать следующее:
Do until El.Result = True
Application.DoEvents()
System.Threading.Thread.Sleep(1)
Loop
gThread.Join()
Надеюсь, это немного поможет.
Итак, ответ на ваш вопрос: не помещайте подпрограмму внутрь формы, вместо этого поместите ее в класс, экземпляр которого вы можете создать.
person
Danny
schedule
25.09.2011