我收到了堆栈跟踪错误...
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Button'.
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.PointToScreen(Point p)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
产生此错误的代码是....
Friend Sub GoHome(ByVal sender As Form)
InTransit = True
sender.Close()
fMain.Show()
End Sub
当我只是切换.show和.close方法
的顺序时,它不会出错Friend Sub GoHome(ByVal sender As Form)
InTransit = True
fMain.Show()
sender.Close()
End Sub
你能告诉我为什么第一种情况它会给出错误,为什么在第二种情况下却没有?
答案 0 :(得分:0)
在这种情况下,sender
和fMain
是同一个对象吗?
如果是这样......当您致电sender.Close
时,您实际上正在调用fMain.Close
,而Close
方法将在幕后处置该对象。如果您随后调用fMain.Show
,那么您将在刚刚处理的对象上调用它,因此会出错。
或者,或者......
也许sender
是fMain
上的子控件之一?
您调用sender.Close
,处置子控件。然后,您使用属于fMain.Show
的子控件调用fMain
尝试执行某事。当它尝试使用您刚处理的子控件执行特定操作时会发生错误。