라이브 앱에서이 문제가 발생합니다.Object.DisposedException from core .NET 코드
(불행히도 이것은 사후 디버깅입니다.이 스택 추적 만 있습니다. 개인적으로 본 적이 없으며, 재현 할 수도 없습니다.)
나는이 예외를 얻을 :
message=Cannot access a disposed object.
Object name: 'Button'.
exceptionMessage=Cannot access a disposed object.
Object name: 'Button'.
exceptionDetails=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)
exceptionSource=System.Windows.Forms
exceptionTargetSite=Void CreateHandle()
양식이 배치 된 후 마우스 이벤트가 양식에 도착되는 것 같습니다.
참고이 스택 추적에는 내 코드가 없습니다.
내가하고있는 이상한 (?) 일은 ShowModal() (아래 "옆으로"참조)과 함께 사용할 때 상당히 적극적으로 Dispose()하는 경향이 있다는 것입니다.
EDIT : 그냥 명확히하기 위해 나는 CLI를 사용하고 있습니다. 실제로 CLI는 삭제 연산자를 사용합니다. 그러나 Dispose()를 호출하는 것과 같습니다.
그러나 ShowModal()이 반환 된 후 (안전해야합니까?), 양식을 완료했을 때만 수행합니다.
이벤트가 이벤트 대기열에 대기 중일 수 있음을 읽었지만 이것이 문제가 될 수는 없다고 생각합니다. 프레임 워크가 오래된 메시지에 관대해야한다는 것을 확실하게 의미합니까? 스트레스 메시지가 다시 기록 될 수 있다고 생각할 수 있으며 창은 언제든지 사라질 수 있습니다.
아이디어가 있으십니까?
재생산 방법을 제안 할 수도 있다면 유용 할 것입니다.
존
을 제외하고:
TBH 내가 매우 엄격하게 필요 Form.ShowDialog 후 폐기()()를 호출 여부를 이해 적이 - ShowDialog를위한 MSDN의 워드 프로세서()에있는 내 조금 모호하다.
Invoke 메서드를 사용하여 의도하지 않게 일부 방법으로 Button에 액세스하려고하는 UI 스레드에서 호출하는 백그라운드 처리를 수행하고있을 가능성이 있습니까? – casperOne
그럴 수도 있습니다. 불행히도, 나는 이것이 어떤 형태로 발생하는지 확실하지 않습니다. 나는 이것을하는 어떤 형태가있다. 그러나 스택 추적은 마우스 이벤트가 아니라 대기중인 Invoke임을 보여줍니까? – John
처분 코드를 보여줄 수 있습니까? 객체가 잘못 배치되거나 배치되면 잘못 참조 될 때 이런 일이 발생하는 것을 보았습니다. –