.NET實現(xiàn)父窗體關閉而不影響子窗體的方法
一般而言,在傳統(tǒng)的VB6中父子窗體(諸如“閃屏”窗體是“父窗體”加載內(nèi)容,然后啟動自動關閉,啟動主窗體,是子窗體)的交互中,我們只需按照這樣的邏輯“按部照搬”地書寫即可(假設“閃屏”窗體設置為啟動窗體):
SplashScreen.Close() MainForm.Show()
但是在VB.NET或者C#中卻不能這樣寫。因為這樣寫的結(jié)果是閃屏窗體“一閃而過”,接著啥也不會出現(xiàn)了。
究其原因,是因為NET中一切都是“類”——閃屏窗體是一個類,這個類內(nèi)部的某個事件內(nèi)部引用了“主窗體”這個類,并且把它創(chuàng)造出來?,F(xiàn)在你突然間關閉了“閃屏”窗體,意味著創(chuàng)建這個“主窗體”的UI線程被終止,自然屬于這個類內(nèi)部的所有其它引用類也就成了“無米之炊”——皮之不存,毛怎焉附?因此兩個窗體“一先一后”被關閉了。
解決此類問題的方法在于分離兩個窗體的創(chuàng)建線程——不讓主窗體通過閃屏窗體UI進行創(chuàng)建。干脆創(chuàng)建一個前臺Thread(不能把IsBackGround設置為true,因為這樣會隨著閃屏窗體關閉而自行關閉?。缓笤赥hread內(nèi)部的委托中使用Application.Run(new 一個窗體實例))。
至于VB.NET中,除了可以用以上方法,還可以直接右鍵項目,做如下設置:
“關閉模式”是指代用何種方式關閉全部的程序(窗體)。默認“當啟動窗體關閉”時(意味著哪個窗體是啟動窗體,它關閉了,其余窗體都跟著自動關閉)。當然您也可以選擇“最后一個窗體關閉時”,這就意味著只有最后的窗體關閉的時候才是全部窗體關閉。因此應該選這項。
相關文章
C# DataSet查看返回結(jié)果集的實現(xiàn)
這篇文章主要介紹了C# DataSet查看返回結(jié)果集的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10C#中LINQ?to?DataSet操作及DataTable與LINQ相互轉(zhuǎn)換
這篇文章介紹了C#中LINQ?to?DataSet操作及DataTable與LINQ相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05基于WebRequest.RegisterPrefix的使用詳解
本篇文章對WebRequest.RegisterPrefix的使用進行了詳細的分析介紹,需要的朋友參考下2013-05-05淺談Async和Await如何簡化異步編程(幾個實例讓你徹底明白)
本篇文章主要介紹了淺談Async和Await如何簡化異步編程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12