Контроль формы автоматически удаляется вскоре после создания формы - PullRequest
1 голос
/ 16 июня 2011

У меня странная и противоречивая проблема.

Приложение встроено в компактную среду 3.5, работающую на устройстве под управлением Windows Mobile 6.5.

Экран приложения выглядит примерно так.

MainScreen (который всегда работает) Screen1 Screen2 SCREEN3

Главный экран -> Экран1 -> Экран2 -> Экран3 -> Главный экран

Когда цикл завершен и приложение возвращается на MainScreen, вызывается MainScreen.Activation () и при условии автоматически запускается 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 располагается после создания формы. Я знаю это, потому что на самом деле могу видеть управление на долю секунды на экране.

Эта проблема также противоречива, она не будет происходить все время в точном сценарии, который заставляет меня поверить, что это что-то случилось с плохим временем Элемент управления, который удаляется, кажется, также выбирается случайным образом, в большинстве случаев это одна и та же кнопка, но были случаи, когда выбрасывался список из формы.

Обратите внимание, что в приложении нет кода, который будет вызывать утилизацию элемента управления.

Любая помощь очень ценится. Спасибо, надеюсь, я объяснил проблему достаточно хорошо.

1 Ответ

0 голосов
/ 22 июня 2011

Я нашел причину и решение моей проблемы.После долгих исследований я обнаружил, что расположение кнопки совпадает с этим случайным исключением, возникающим при отладке:

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 в форму, которая страдает от этой проблемы.

Случайное исключение все еще происходит в отладке в то же время, но с тех пор я не смог воспроизвести проблему.

...