我有这个奇怪且不一致的问题。
该应用程序是在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上的控件。我知道这是因为我实际上可以在屏幕上看到控件一瞬间。
问题也是不一致的,它不会一直发生在确切的场景中,这让我相信它会遇到时机不好的问题。 处置的控件似乎也是随机选择的,大部分时间它都是相同的按钮,但有时表格中的列表框被处理掉了。
请注意,应用程序中没有代码可以调用处理控件。
非常感谢任何帮助。谢谢,希望我能够很好地解释这个问题。
答案 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。
机会异常仍然在调试中同时发生但我从那时起就无法重现该问题。