使对象处理不那么随机

时间:2014-09-26 19:11:32

标签: .net vb.net winforms

我正在研究一个用VB.NET编写的旧系统,它在应用程序关闭时不断抛出异常,因为它试图访问已处置的对象。它发生在委托中,该委托在另一个线程的UI线程上设置Label的文本:

Private Sub SetWeightText_ThreadSafe(ByVal theLabel As Label, ByVal value As String)
    If Not Me.IsDisposed AndAlso Not Me.Disposing Then
        If theLabel.InvokeRequired Then
            Dim theDelegate As New SetWeightText_Del(AddressOf SetWeightText_ThreadSafe)
           'Exception here:
            Me.Invoke(theDelegate, New Object() {theLabel, value}) 
        Else
            theLabel.Text = value
        End If
    End If
End Sub

异常发生在上面标记的行,其中调用了委托。当调试器在此处停止时,异常显示对象(Me)已被释放,并且确定Me.Disposing已成为真,显然有时在该初始if语句之间,代表的调用。

例外是ObjectDisposedException was unhandled by user code。我知道我可能只是将整个事情用空的处理程序包装在Try..Catch中并完成它,但我宁愿完全阻止这个问题。

这发生每个时间。我该如何避免这种情况?

0 个答案:

没有答案