在该类中创建一个名为 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()
希望这有所帮助。
所以你的问题的答案是;不要把你的子放在一个表单中,而是把它放在一个你可以创建一个实例的类中。