當我使用Show()
使用Dispose()
而不是Close()
關閉表單時發生了什麼?有人可以詳細告訴我,Dispose()
方法中發生了什麼?使用dispose()方法代替close()方法到表格
回答
Close()
和Dispose()
之間的基本區別是,當調用Close()
方法時,任何託管資源都可以暫時關閉,並可以再次打開。這意味着,使用相同的對象可以重新打開或使用資源。作爲Dispose()
方法從內存中永久刪除任何資源((未)管理)進行清理,並且該資源不再存在以用於任何進一步處理。
或者只是一般的說法。連接對象調用Close()
將釋放連接回池中。調用Dispose()
將調用Close()
,然後將連接字符串設置爲空。
某些對象(如Stream)實現了IDisposable
,但Dispose方法僅在首先將該對象投射到IDisposable
時可用。但它確實公開了Close()
方法。
我總是會爭辯說,當對象完成時,你應該調用Dispose()
任何執行IDisposable
的對象。即使它什麼都不做。無論如何,jit編譯器會優化它的最終代碼。如果對象包含Close()
但不包含Dispose()
,則請致電Close()
。
您也可以使用IDispoable
對象
using(SqlConnection con = new SqlConnection())
{
//code...
}
這using語句將調用Dispose()
上的SqlConnection時,會退出塊。
反編譯的兩個方法(Dispose
和Close
)事實證明,後者執行兩個額外的檢查,然後調用Dispose
,就像這樣的:
object[] objArray;
if (base.GetState(262144))
{
throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[] { "Close" }));
}
if (base.IsHandleCreated)
{
this.closeReason = CloseReason.UserClosing;
base.SendMessage(16, 0, 0);
return;
}
base.Dispose();
從文檔:
當表單已關閉,則在該對象內創建的所有資源都將關閉並處理該表單。 表單在關閉時不處理的兩個條件是:(1)它是多文檔界面(MDI)應用程序的一部分,且表單不可見;和(2)你使用ShowDialog顯示了表單。在這些情況下,您需要手動調用Dispose來標記垃圾收集的所有表單控件。
希望它有幫助。
其實,在這種情況下Close()
和Dispose()
是完全不同的:
Close
通過發送此時,相應的Windows消息關閉窗體。您將可以使用Open()
Dispose
完全配置表單資源,並且您將無法再重新使用表單實例。
- 1. 使用Dispose()方法
- 2. close()方法
- 3. HttpWebResponse Close()方法
- 4. ParMap方法替代方法
- 5. Java swing dispose()方法
- 6. SQLiteOpenHelper和close方法
- 7. 替代方法
- 8. 替代方法
- 9. 我應該使用close方法還是close方法關閉輸出流?
- 10. 應該如何使用LibGDX dispose()方法?
- 11. 無法用Java替換方法代替
- 12. 這是使用Dispose方法的正確方法嗎?
- 13. 棄用com.apple.eawt.ApplicationListener的替代方法有什麼替代方法
- 14. 如何在StreamWriter中使用Close()方法
- 15. 替代socket.accept()方法
- 16. Thread.sleep()方法替代
- 17. Strstr替代方法
- 18. sqlceengine.compact方法替代
- 19. 替代方法.hasNextInt?
- 20. 替代方法V3
- 21. 替代arcTo方法?
- 22. 替代方法creationcomplete
- 23. 的DataContext沒有Dispose()方法
- 24. sizeWithFont的替代方法:方法
- 25. jQuery .html()方法的替代方法?
- 26. CONTAINS方法的替代方法?
- 27. Excel Interop的替代方法SaveAs()方法
- 28. Thread.Suspend()方法的替代方法
- 29. jsp中PrintStacktrace()方法的替代方法
- 30. 靜態方法或OO替代方法?
C#沒有窗體。請指定WinForms/WPF/... –
@亨克霍爾特曼 - 我已更新我的問題 – Selo
[我需要在窗體關閉後處理窗體嗎?](https://stackoverflow.com/a/39501121/3110834 ) –