2017-06-22 45 views
0

我有下面的代碼,關閉一個loginform並打開mainformForm.Show VS Form.ShowDialog錯扣

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。

任何想法?

+0

基於舊的備份代碼。這可能發生在關機模式設置中,該設置可以在解決方案的屬性設置的「應用程序」選項卡中找到。確保它沒有設置爲當啓動窗體關閉時,因爲這會導致此行爲。 –

+0

關閉模式是:當最後一個窗體關閉時。此外,這不應該影響線程交叉調用? – Kanky

+0

恐怕這個問題的描述在這個特例中無助於理解它。可能有用的是在Visual Studio中獲得的完整異常調用堆棧(不是來自Exception對象)。更好 - 所有主題的調用堆棧。你可以在這個問題上添加這些信息嗎? – Uranus

回答

0

我不太明白你的問題。你想使用舊的代碼?新的?你想解決什麼問題?那麼,對你調用frm.Show()和Thisform.Close()的解釋很簡單。 當您調用frm.Show()時,新窗體在第二個線程上打開,並且當前窗體繼續正常執行其代碼,從邏輯上到達其關閉的一行代碼Thisform.Close()。因爲它是主窗體,所以它在關閉時會嘗試終止所有其他窗體,因此它會嘗試關閉剛剛打開的窗體,以便發生跨線程異常(請記住新窗體在另一個線程上運行;) )

但是當你調用frm.ShowDialog()時,操作是不同的。它不啓動一個新線程,它只是指向新窗體,所以ShowDialog後面的任何代碼行只在新論壇關閉時運行;

+0

所有我想要做的,如果關閉登錄窗體,當主窗體加載完成時顯示啓動畫面並關閉啓動畫面。舊的代碼過去沒有任何例外,但現在不行。 – Kanky