如何解决表格创建后不久,表格控制就会自动放置
我有这个奇怪而又不一致的问题。 该应用程序内置在运行于Windows Mobile 6.5设备上的紧凑框架3.5中。 应用程序的屏幕流程有点像这样。 MainScreen(始终运行) 屏幕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。
机会异常仍然同时在调试中发生,但是从那以后我一直无法重现该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。