.net – 无法访问已处理的对象 – 如何解决?
在VB.NET WinForms项目中,我收到一个异常
关闭表单时。它很少发生,我无法根据需要重新创建它。堆栈跟踪如下所示: Cannot access a disposed object. Object name: 'dbiSchedule'. at System.Windows.Forms.Control.CreateHandle() at System.Windows.Forms.Control.get_Handle() at System.Windows.Forms.Control.PointToScreen(Point p) at Dbi.WinControl.Schedule.dbiSchedule.a(Boolean A_0) at Dbi.WinControl.Schedule.dbiSchedule.a(Object A_0,EventArgs A_1) at System.Windows.Forms.Timer.OnTick(EventArgs e) at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam) dbiSchedule是来自Dbi-tech的计划控制。表单上有一个计时器每隔几分钟更新屏幕上的日程表。 任何想法是什么导致异常以及我如何去修复它?甚至可以根据需要重新创建它? 嘿!感谢所有的答案。我们在FormClosing事件上停止计时器,我们会在计时器组件中检查IsDisposed属性,然后在Timer Tick事件中使用它,但不能帮助。 这是一个非常烦人的问题,因为如果有人提出了一个有效的解决方案 – 我无法确认解决方案,因为我无法手动重新创建问题。
在访问控件之前,请尝试检查
IsDisposed属性。假设您使用FormClosed事件,您也可以在
FormClosing事件中检查它。
在检查IsDisposed之前调用GC.Collect可能有所帮助,但要小心。阅读Rico Mariani“When to call GC.Collect()”这篇文章。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |