表单控件在创建表单后立即自动处理

时间:2011-06-16 15:37:31

标签: c# .net-3.5 compact-framework

我有这个奇怪且不一致的问题。

该应用程序是在Windows Mobile 6.5设备上运行的紧凑框架3.5中构建的。

应用程序的屏幕流程有点像这样。

MainScreen(始终在运行) 屏蔽1 画面2 屏幕3

MainsScreen - >屏幕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上的控件。我知道这是因为我实际上可以在屏幕上看到控件一瞬间。

问题也是不一致的,它不会一直发生在确切的场景中,这让我相信它会遇到时机不好的问题。 处置的控件似乎也是随机选择的,大部分时间它都是相同的按钮,但有时表格中的列表框被处理掉了。

请注意,应用程序中没有代码可以调用处理控件。

非常感谢任何帮助。谢谢,希望我能够很好地解释这个问题。

1 个答案:

答案 0 :(得分: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。

机会异常仍然在调试中同时发生但我从那时起就无法重现该问题。