form.show vs form.showdialog交叉线程



我有以下代码关闭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()

,但这似乎现在正在关闭Mainform。

有什么想法?

我不太了解您的问题。您要使用旧代码吗?新的?您要解决什么问题?

好吧,您致电frm.show((和thisform.close((的解释很简单。当您调用frm.show((时,新表单将在第二个线程上打开,并且当前表单继续正常执行其代码,从逻辑上到达代码线thisform.close.close.close.close.close((。因为它是主要形式,所以当它关闭时,它试图终止所有其他形式,因此它试图关闭您刚刚打开的表单,因此会发生跨线程异常(请记住,新表格在另一个线程上运行;((

但是,当您致电frm.showdialog((时,操作是不同的。它不会启动新线程,而只是直接转到新表单,因此ShowDialog之后的任何代码线仅在关闭新论坛时运行;

最新更新