退出申请时为什么不上课?

时间:2016-07-15 21:00:55

标签: vb.net visual-studio visual-studio-2012

我记不起来了,但在测试和关闭我的应用程序时,我在前一段时间内收到了“对象处理异常”这样的错误。我是否需要手动处理每个对象?或者使用控件/对象的正确方法是什么?

错误以主要形式表示此行:

Private th As New SellerTimerHandler

我几乎没有得到这个错误(我无法测试它)所以我想知道一般的想法是避免不必要地占用内存中的空间,不仅在执行和关闭时,而且在崩溃之后。

2 个答案:

答案 0 :(得分:1)

当您尝试访问已经处置的对象时,会引发System.ObjectDisposedException 该异常与类/对象无被处置。

当您的应用程序关闭时,您不需要对其对象/资源执行任何操作,因为Windows会为您处理。只需要在运行时执行对象的处理和垃圾收集,以释放内存,使应用程序能够继续运行,并且不会占用所有RAM。

当进程正在运行时,操作系统完全了解所有它正在使用的系统资源;这意味着当进程实际关闭时,操作系统只会释放它使用的所有内存(这适用于进程崩溃时)

答案 1 :(得分:1)

我猜你有一个计时器或其他运行的东西,它会定期使用你班上的物品,这些物品在关闭时由GC处理过。

您应该在班级中实施IDisposable。如果它是表单,它已经存在,您应该在设计器中查找Dispose(bool)

如果你有定时器运行,你应该在那里停止并取消它们。实际上,您的类中的任何托管对象都应该放在这里。这样,您就可以控制对象的处理顺序

Protected Overridable Sub Dispose(disposing As Boolean)
    If Not Me.disposedValue Then
        If disposing Then
            ' TODO: dispose managed state (managed objects).
            ' i.e. stop all timers
        End If

        ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
        ' TODO: set large fields to null.
    End If
    Me.disposedValue = True
End Sub