gpt4 book ai didi

.net - 无法访问已处置的对象 - 如何修复?

转载 作者:行者123 更新时间:2023-12-03 07:41:23 25 4
gpt4 key购买 nike

在 VB.NET WinForms 项目中,我遇到异常

Cannot access a disposed of 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 事件上停止了 Timer,并且在 Timer Tick 事件中使用之前检查了计划组件上的 IsDispose 属性,但这没有帮助。

这是一个非常烦人的问题,因为如果有人确实想出了一个有效的解决方案 - 我将无法确认该解决方案,因为我无法手动重新创建问题。

最佳答案

尝试检查IsDisposed访问控件之前的属性。您也可以在 FormClosing 上查看。事件,假设您使用的是 FormClosed 事件。

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.

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

关于.net - 无法访问已处置的对象 - 如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com