.NET完成父窗體封閉而不影響子窗體的辦法。本站提示廣大學習愛好者:(.NET完成父窗體封閉而不影響子窗體的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是.NET完成父窗體封閉而不影響子窗體的辦法正文
普通而言,在傳統的VB6中父子窗體(諸如“閃屏”窗體是“父窗體”加載內容,然後啟動主動封閉,啟動主窗體,是子窗體)的交互中,我們只需依照如許的邏輯“按部照搬”地書寫便可(假定“閃屏”窗體設置為啟動窗體):
SplashScreen.Close() MainForm.Show()
然則在VB.NET或許C#中卻不克不及如許寫。由於如許寫的成果是閃屏窗體“一閃而過”,接著啥也不會湧現了。
究其緣由,是由於NET中一切都是“類”——閃屏窗體是一個類,這個類外部的某個事宜外部援用了“主窗體”這個類,而且把它發明出來。如今你忽然間封閉了“閃屏”窗體,意味著創立這個“主窗體”的UI線程被終止,天然屬於這個類外部的一切其它援用類也就成了“無米之炊”——皮之不存,毛怎焉附?是以兩個窗體“一先一後”被封閉了。
處理此類成績的辦法在於分別兩個窗體的創立線程——不讓主窗體經由過程閃屏窗體UI停止創立。爽性創立一個前台Thread(不克不及把IsBackGround設置為true,由於如許會跟著閃屏窗體封閉而自行封閉!),然後在Thread外部的拜托中應用Application.Run(new 一個窗體實例))。
至於VB.NET中,除可以用以上辦法,還可以直接右鍵項目,做以下設置:
“封閉形式”是指代用何種方法封閉全體的法式(窗體)。默許“當啟動窗體封閉”時(意味著哪一個窗體是啟動窗體,它封閉了,其他窗體都隨著主動封閉)。固然您也能夠選擇“最初一個窗體封閉時”,這就意味著只要最初的窗體封閉的時刻才是全體窗體封閉。是以應當選這項。