У меня проблема с живым приложением.
(К сожалению, это посмертная отладка - у меня есть только эта трассировка стека. Я никогда не видел этого лично и не могу воспроизвести).
Я получаю это исключение:
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()
Похоже, что событие мыши достигает формы после ее удаления.
Обратите внимание, что ее нетмоего кода в этой трассировке стека.
Единственная странная (?) вещь, которую я делаю, это то, что я склонен довольно агрессивно использовать Dispose () Forms, когда я использую их с ShowModal ()"ниже).
РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я использую C ++ - CLI, поэтому на самом деле я не вызываю Dispose () Я использую оператор удаления.Однако это то же самое, что вызов Dispose ().
Но я делаю это только после того, как ShowModal () вернулся (это должно быть безопасно, верно?), И только когда я закончу с формой.
Я думаю, что прочитал, что события могут быть поставлены в очередь в очереди событий, но я не могу поверить, что это будет проблемой.Я имею в виду, конечно, рамки должны быть терпимы к старым сообщениям?Я вполне могу себе представить, что сообщения, находящиеся под стрессом, могут задержаться и, конечно, окно может исчезнуть в любое время?
Есть идеи?
Если бы вы даже могли предложить способы воспроизведения, это могло бы бытьполезно.
Джон
Помимо:
TBH Я никогда не понимал, строго ли необходим вызов Dispose () после Form.ShowDialog () - MSDNДокументы для ShowDialog (), на мой взгляд, немного неоднозначны.