System.ObjectDisposedException
gdy przycisk styl jest ustawiony na FlatStyle.System
w aplikacji WinFormsSystem.ObjectDisposedException gdy przycisk styl jest ustawiony na FlatStyle.System w aplikacji WinForms
Mam formularz dziecko, które pojawia się na kliknięcie przycisku w rodzica . A kod idzie jak poniżej.
Formularz dziecka ma z kolei przycisk, który się zamyka.
Public Class Child
Private Sub btnCloseMe_Click(sender As Object, e As EventArgs) Handles btnCloseMe.Click
Me.Close()
End Sub
End Class
kroki, aby uzyskać wyjątek:
- W trybie debugowania, umieścić punkt przerwania na
Me.Close()
- Następnie kliknij przycisk zamykania z dzieckiem.
- Przy trafieniu punktu przerwa otwarty notatnik i
- powrót do roztworu następnie kontynuować
Wyjątek:
System.ObjectDisposedException was unhandled
HResult=-2146232798
Message=Cannot access a disposed object.
Object name: 'Button'.
Source=System.Windows.Forms
ObjectName=Button
StackTrace:
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.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at WindowsApplication2.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
Czy ktoś ma jakiś pomysł, to jest wyraźnie nadchodzi, gdy przycisk styl ustawiony FlatStyle.System
Czy to powoduje problem w aplikacji lub z ciekawości? –
W mojej aplikacji działającej w czasie rzeczywistym przy zamkniętych kliknięciach jest długotrwały proces, który trwa co najmniej 10-15 sekund. W międzyczasie, jeśli użytkownik kliknie na inną aplikację, np. Notatnik, dokument tekstowy lub chrome, pojawia się ten błąd. –
Debugowanie interfejsu użytkownika ma talent do powodowania takich problemów. Samo przerwanie debugowania pozwala na różny sposób wywoływania zdarzeń, może powodować ogniskowanie i malowanie. W takim przypadku aktywacja innego procesu jest wyzwalaczem. Zakładam, że ma to coś wspólnego z właściwością Capture, kluczową dla przycisków. W skrajnych przypadkach może być konieczne użycie zdalnego debuggera, aby sam debugger nie mógł wpłynąć na interfejs użytkownika. To nie jest tak skrajny przypadek, po prostu nie uruchamia się. Po prostu trzymaj motoryzację. –