gpt4 book ai didi

vb.net - 使用线程打开表单

转载 作者:行者123 更新时间:2023-12-04 16:34:22 25 4
gpt4 key购买 nike

我目前正在学习 VB.NET,我遇到了关于使用线程打开表单的问题。

例如,当我单击打开按钮时,tread 将启动并打开另一个表单来添加或更改数据。

因此,我尝试实现这部分,例如

Private Sub menu_Click(sender As Object, e As EventArgs) Handles menu.Click       
Dim A As System.Threading.Thread = New Threading.Thread(AddressOf Task_A)
A.Start()
End Sub

Public Sub Task_A()
frmBuild.Show()
End Sub

但是,我在打开 frmBuild 时遇到错误通过线程。我需要使用其他方法打开表单吗?

而且,当 fromBuild 关闭时,我们如何杀死线程?

最佳答案

这几乎总是一个坏主意。您不应该尝试使用单独的线程来打开 Form - 相反,在主 UI 线程上打开所有表单,并将原本会阻塞的“工作”移到后台线程上。 BackgroundWorker是处理工作的常用手段。

话虽如此,如果您出于某种不寻常的原因需要这样做,您还需要做另外两件事。

首先,您需要设置该线程的单元状态。您还需要使用 Application.Run要显示表单,并且必须在正确的线程上创建该表单:

Private Sub menu_Click(sender As Object, e As EventArgs) Handles menu.Click       
Dim th As System.Threading.Thread = New Threading.Thread(AddressOf Task_A)
th.SetApartmentState(ApartmentState.STA);
th.Start()
End Sub

Public Sub Task_A()
frmBuild = New YourForm() ' Must be created on this thread!
Application.Run(frmBuild)
End Sub

为了从另一个线程关闭表单,您可以使用:
frmBuild.BeginInvoke(New Action(Sub() frmBuild.Close()))

And, How can we kill the thread when fromBuild closes ?



当表单关闭时,线程会自动关闭,如果它是如上所示写的。

关于vb.net - 使用线程打开表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com