2011-06-16 74 views
1

我有這個奇怪和不一致的問題。窗體控件在窗體創建後不久自動處理

該應用程序內置於運行在Windows Mobile 6.5設備上的緊湊型框架3.5中。

應用程序的屏幕流程有點像這樣。

MainScreen(其總是處於運行狀態) 屏蔽1 畫面2 屏幕3

MainsScreen - >屏蔽1 - >畫面2 - >屏幕3 - > MainScreen

當循環完成,並於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(); 
    } 

屏蔽1也有這段代碼形式的負載:

private void Screen1_Load(object sender, System.EventArgs e) 
{ 
     if(Condition) 
     { 
      NextScreen(); 
     } 
} 
private void NextScreen() 
    { 

     Screen2 formScreen2= new Screen2(); 
     formScreen2.Show(); 

     Close(); 
    } 

所以當Screen1_Load滿足這個條件的應用程序會自動啓動屏幕2和關閉這個。

在這種特殊情況下,有時屏幕2上的控件有時會在創建表單後被處理。我知道這一點,因爲我實際上可以在屏幕上看到一秒鐘的控制。

這個問題也不一致,它不會一直髮生在確切的情況下,這使得我相信它有時間不對。 得到處置的控制似乎也隨機選擇,大部分時間它是相同的按鈕,但有些情況下,表單中的列表框被丟棄。

請注意,應用程序中沒有代碼可以調用控件。

任何幫助,非常感謝。謝謝,希望我解釋得很好。

回答

0

我找到了問題的原因和解決方案。 多的調查後,我發現,設置在按鍵與此機會異常調試發生重合:

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運行並嘗試清除內存。

我使用了這個問題的答案 Prevent Garbage Collector並且還在遇到此問題的表單上添加了GC.KeepAlive。

機會異常仍然在調試中同時發生,但自那時以來我一直無法重現該問題。

相關問題