我有以下代码关闭loginform
并打开mainform
Sub Loadform(ByVal formName As Form)
Dim Thisform As Form = DirectCast(formName, frmLogIn1)
Thisform.Hide()
Dim frm As New frmMain
frm.ShowDialog() <- Problem
Thisform.Close()
End Sub
mainform有一个 DevExpress SplashScreenManager,它可以自动加载和卸载启动画面。
当我调用frm.Show
时,SplashScreen关闭时会出现跨线程异常。
如果我使用frm.ShowDialog
调用它,则可以正常工作。这个新的代码。该应用程序大约12个月大,这个代码在开始时添加,但我现在遇到了问题。
原始代码(取自备份)是:
Me.Hide()
Dim main As New frmMain
main.Show()
Me.Dispose()
但现在似乎正在关闭主体。
有什么想法吗?
答案 0 :(得分:0)
我不太明白你的问题。你想使用旧代码吗?新的?你想解决什么问题?
好吧,你调用frm.Show()和Thisform.Close()的解释很简单。 当你调用frm.Show()时,新表单在第二个线程上打开,当前表单继续正常执行其代码,逻辑上到达一行代码,它将关闭它的Thisform.Close()。因为它是主窗体,当它关闭时会尝试终止所有其他窗体,因此它会尝试关闭刚刚打开的窗体,因此会发生跨线程异常(请记住新窗体是在另一个线程上运行;) )
但是当你调用frm.ShowDialog()时,操作是不同的。它没有启动新线程,它只是指向新表单,因此ShowDialog之后的任何代码行仅在新论坛关闭时运行;