C# 模態窗口與非模態窗口

模態窗口函數

(ShowDialog)彈出窗口阻止調用窗口的全部消息響應。spa

只有在彈出窗口結束後調用窗口才能繼續。線程

在模態窗口「關閉」後,窗口並無真正被「關閉」,「關閉」按鈕並無調用窗體的Close方法,只是將窗體的Visible屬性賦值爲false,隱藏了窗體,因此模態窗口在不須要用的時候,務必手動Dispose釋放窗體資源,雖然.Net會定時執行垃圾回收,可是什麼時候執行垃圾回收並不受控制,當模態窗口關閉後窗體資源沒有及時手動釋放時,其餘相關操做可能會引發線程阻塞致使程序假死。模態窗口資源釋放後仍然能在當前函數塊中讀取模態窗口中信息,包括窗口的返回狀態,窗口子控件的值。對象


非模態窗口資源

(Show)能夠在彈出窗口和調用窗口之間隨意切換。垃圾回收

調用窗口調用show方法後,下面的代碼能夠當即執行。程序

在非模態窗口關閉時,Close方法會立刻調用Dispose釋放資源,此時對象尚未被銷燬,仍然能在代碼中經過窗口實例獲取窗口中的信息。方法

 

使用模態窗口未及時手動釋放致使主線程阻塞:co

以Halcon的HWindowControl控件爲例,在窗口A中實例化一個HWindowControl控件,窗口B中實例化一個HWindowControl控件,在A窗口經過ShowDialog調用B窗口,而後關閉B窗口(如此反覆2~3次),接着在A窗口的HWindowControl控件上執行DrawRectangle1等繪製操做的話,很容易就阻塞主線程,致使程序假死;因此B窗口在不須要使用時務必及時手動Dispose釋放窗體資源,切記切記!!!阻塞

相關文章
相關標籤/搜索