簡體   English   中英

創建表單后不久,表單控件將自動處置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM