2012-11-20 10 views
0

我有一個需要執行特定操作的類。根據輸入數據,可能會顯示一些對話框。這些對話框需要與父窗口的句柄調用,使他們正確居中等父窗體最終收是否將窗口句柄(IntPtr)保存在一個變量中會阻止窗體正確處理?

private IntPtr _parentWindow; 
... 
System.Windows.Forms.MessageBox.Show(System.Windows.Forms.Control.FromHandle(_parentWindow), "message"); 

後,我的類的實例仍然存在,與_parentWindow仍然具有價值分配。

這是安全嗎?或者,由於_parentWindow被填充句柄,GC沒有完全處理表單?

+0

GC從不直接處理任何對象。 Handle不是引用,因此Form在顯式或隱式調用其Dispose方法時將被丟棄。 –

回答

0

不,保持窗口句柄的值不會使窗口不被銷燬或其資源完全釋放。

的GC是不負責釋放形式的非託管資源(資源表示作爲window handle,這是通過DestroyWindow最終釋放),也不認爲這是在一個特殊的方式對待IntPtr成員。

+0

謝謝,有問題的父窗口非常大,可能會在用戶交互過程中再次創建。 – MoSlo