加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – 无法访问已处理的对象 – 如何解决?

发布时间:2020-12-16 23:53:51 所属栏目:大数据 来源:网络整理
导读:在VB.NET WinForms项目中,我收到一个异常 Cannot access a disposed object 关闭表单时。它很少发生,我无法根据需要重新创建它。堆栈跟踪如下所示: Cannot access a disposed object. Object name: 'dbiSchedule'. at System.Windows.Forms.Control.Creat
在VB.NET WinForms项目中,我收到一个异常

Cannot access a disposed object

关闭表单时。它很少发生,我无法根据需要重新创建它。堆栈跟踪如下所示:

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事件中检查它。

We do stop the Timer on the
FormClosing event and we do check the
IsDisposed property on the schedule
component before using it in the Timer
Tick event but it doesn’t help.

在检查IsDisposed之前调用GC.Collect可能有所帮助,但要小心。阅读Rico Mariani“When to call GC.Collect()”这篇文章。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读