[英]Will the WPF user Control be Disposed if used inside a Windows Form that will be disposed?
[英]Form Control getting disposed automatically shortly after form being created
我有這個奇怪而又不一致的問題。
該應用程序內置在運行於Windows Mobile 6.5設備上的緊湊框架3.5中。
應用程序的屏幕流程有點像這樣。
主屏幕(始終運行)屏幕1屏幕2屏幕3
主屏幕->屏幕1->屏幕2->屏幕3->主屏幕
當循環完成並且應用程序重新回到MainScreen時,將調用MainScreen.Activated(),並在一定條件下自動啟動Screen1。 代碼看起來像這樣:
private void MainScreen_Activated(object sender, EventArgs e)
{
if (Condition)
{
NextScreen();
return;
}
//other code here
}
private void NextScreen()
{
Screen1 formScreen1 = new Screen1 ();
formScreen1 .Show();
}
Screen1在以下形式的負載中也具有這段代碼:
private void Screen1_Load(object sender, System.EventArgs e)
{
if(Condition)
{
NextScreen();
}
}
private void NextScreen()
{
Screen2 formScreen2= new Screen2();
formScreen2.Show();
Close();
}
因此,當滿足Screen1_Load中的條件時,應用程序將自動啟動Screen2並將其關閉。
在這種特殊情況下,有時在創建表單后有時會丟棄Screen2上的控件。 我知道這一點,因為我實際上可以在屏幕上看到該控件。
這個問題也不一致,在確切的情況下不會一直發生,這使我相信時間安排不好。 被處置的控件似乎也是隨機選擇的,大多數情況下它是同一按鈕,但是在某些情況下,表單中的列表框也被處置。
請注意,應用程序中沒有任何代碼可以調用該控件。
任何幫助是極大的贊賞。 謝謝,希望我能很好地解釋這個問題。
我找到了原因並解決了我的問題。 經過大量調查,我發現配置的按鈕與在調試中發生的這種偶然異常一致:
A first chance exception of type 'System.ObjectDisposedException' occurred in System.Drawing.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.Drawing.dll
我還發現,當設備內存不足或認為內存不足導致GC運行並嘗試清除內存時,可能會發生這種偶然異常。
我使用了此問題的答案“ 防止垃圾收集器”,並在遭受此問題的表單上添加了GC.KeepAlive。
機會異常仍然同時在調試中發生,但從那時起我一直無法重現該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.