Try...Catch... Exception wird nicht gefangen?

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von hans im glück.

    Try...Catch... Exception wird nicht gefangen?

    Moin,

    und zwar befülle ich mein typisiertes Dataset im Me.Load per

    VB.NET-Quellcode

    1. Try
    2. Me.TfusersTableAdapter.Fill(Me.TaskDBDataSet.tfusers)
    3. Catch ex As Exception
    4. MessageBox.Show("Some Error Message")
    5. Me.Close()
    6. End Try


    Da mein Server drad abgeschaltet ist, bekomme ich beim Start von eben diesem Block eine

    Quellcode

    1. A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

    (habs per Break Point überprüft)

    Leider wird die Exception wohl aber nicht gecatcht, bzw. es erscheint keine MessageBox incl Fehlermeldung O.o
    Anfangs hats irgendwie noch funktioniert, aber jetzt kommt die generische Fehlermeldung von Windows (Die mit Continue und Quit) aber nicht meine gecatchte Exception?!
    Warum wird diese nicht mehr abgefahren?
    Danke!

    Grüße,
    Kevin
    Es ist immer das gleiche. Exceptions in Load werden verschluckt. Warum das jetzt nicht gefangen wird, weiß der allmächtige Gabe Newell oder das fliegende Spaghettimonster, aber ist für uns erst mal nicht absehbar.
    Verwende nicht das Load-Event sondern z.B. Shown.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hmm - afaik ists "nur" der Debugger, der im Startup streikt. TryCatch funktioniert - grad getestet:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Try
    3. Throw New ArgumentException("blabla")
    4. Catch ex As Exception
    5. MessageBox.Show(ex.Message)
    6. End Try
    7. End Sub
    Also wird viercnts Fehler bereits iwo davor liegen.
    An der Lösung ändert das nichts: Form_Load einfach nicht benutzen.
    @Viercnt Kann es sein, dass die Exception in einem anderen Thread geworfen wird?
    Kann es sein, dass da eine Primär-Exception aus unmanaged Code heraus geworfen wird?
    Da passieren manchmal merkwürdige Dinge.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für eure Antworten!

    Habs grad mal versucht, den Me.Load aufzusplitten, sodass nur das Befüllen meines Datasets per Adapter im Me.Load stattfindet, den restlichen Code aus Me.Load habe ich in Me.Shown verfrachtet.


    Aber ungeachtet von dieser Änderung: wenn ichs aus dem Visual Studio heraus compiliere wirft er mir die Exception ins Immediate Window unten und startet aber die Form - also gibt keine MessageBox aus und beendet nicht per Me.Close() mein Programm sollte ein Fehler auftreten. O.o

    Starte ich aber die eben compilierte .exe aus dem /bin/ Ordner, zeigt er mir meine MessageBox an und beendet auch mein Programm nachdem die Messagebox per OK geschlossen wurde O.o
    ABER: zudem zeigt er über der Messagebox noch eine .net Exception an:




    Also jetzt bin ich völlig raus :(

    @RodFromGermany Leider versteh ich nicht genau, was du meinst X(

    €Dit: Habe @Niko Ortners Vorschlag mal probiert, innerhalb Me.Load/Me.Shown werden diese Exceptions nicht gefangen, habe später in einer Sub nochmal eine DB abfrage (einfache Count abfrage) - diese failt natürlich auch, aber, wenn ich da einen Try...Catch... einbaue catcht er dort die Exception - aber wieso nicht im Load?
    Selbst wenn ich meinen Load Code in eine andere Sub auslagere und im Me.Load einfach nur die Sub aufrufe catcht er keine Exceptions :(
    Danke!

    Grüße,
    Kevin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Viercnt“ ()

    Im me.load steht nur:

    VB.NET-Quellcode

    1. Try
    2. Me.TfusersTableAdapter.Fill(Me.TaskDBDataSet.tfusers)
    3. Catch ex As SqlException
    4. MessageBox.Show("NoConnection", "No connection to SQL Server possible!")
    5. Me.Close()
    6. End Try


    Problem ist nur, selbst wenn ich auf Me.Load komplett verzichte, und das zu Me.Shown migriere, gibts dort keine Exceptions :/
    Also scheints ja nicht nur am Me.Load zu liegen?
    Danke!

    Grüße,
    Kevin
    @Viercnt Klapp mal die etails auf und mach davon ggf. mehrere Schots.
    Lass das ganze im Studio als DEBUG laufen und sieh Dir den Output an, was und ggf. wo es endet, das Studio stellt ggf. den Cursor auf die Zeile, wo es knallt, wenn die Exception nicht gefangen werden kann.
    ---
    Load umgehst Du, wenn Du den Code nach Shown packst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @Viercnt Klapp mal die etails auf und mach davon ggf. mehrere Schots.
    Lass das ganze im Studio als DEBUG laufen und sieh Dir den Output an, was und ggf. wo es endet, das Studio stellt ggf. den Cursor auf die Zeile, wo es knallt, wenn die Exception nicht gefangen werden kann.
    ---


    Steh grad echt aufm Schlauch - so detalliert habe ich noch nie debuggen müssen :(
    Weiß grad nicht was du mit Details aufklappen/mehrere Schots meinst etc. :(

    RodFromGermany schrieb:


    Load umgehst Du, wenn Du den Code nach Shown packst.


    Selbst wenn mein Me.Load komplett leer ist, und alles von Me.Load im Me.Shown steht wirft er keine Exceptions :(
    Selbst wenn ich das Kapsle und in ein weiteres Private Sub packe, und nur diese Sub in Me.Shown aufrufe => keine Exceptions :/
    Danke!

    Grüße,
    Kevin
    Danke @hans im glück :)

    Diese .Net Fehlermeldungsbox kommt aber nur, wenn ich die fertige .exe (ob nun als Debug oder Release kompiliert) starte. Starte ichs per F5 aus dem Visual Studio raus, startet meine Form, aber eben ohne geladene Datensätze und das lässt dann früher oder später mein gesamtprojekt abschmieren.

    Ich starte mal die .exe aus dem Ordner und kopiere den Detailstext hier rein

    €dit: hier der Text:
    Spoiler anzeigen

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
    at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.Open()
    at BE_TaskForce.TaskForceDataSetTableAdapters.TaskDBTableAdapter.CountOwner(String Owner) in C:\Users\ASD\Desktop\Programming\TaskForce\BE TaskForce\BE TaskForce\TaskForceDataSet.Designer.vb:line 3246
    at BE_TaskForce.homemenu.UpdateStatisticsFunction() in C:\Users\ASD\Desktop\Programming\TaskForce\BE TaskForce\BE TaskForce\homemenu.vb:line 132
    at BE_TaskForce.homemenu.RefreshTimer_Tick(Object sender, EventArgs e) in C:\Users\ASD\Desktop\Programming\TaskForce\BE TaskForce\BE TaskForce\homemenu.vb:line 106
    at System.Windows.Forms.Timer.OnTick(EventArgs e)
    at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    ClientConnectionId:00000000-0000-0000-0000-000000000000

    ************** Loaded Assemblies **************
    mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    BE TaskForce
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Users/GuentheK/Desktop/Programming/TaskForce/BE TaskForce/BE TaskForce/bin/Debug/BE TaskForce.exe
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly Version: 10.0.0.0
    Win32 Version: 11.0.50938.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    ----------------------------------------
    System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.34238 built by: FX452RTMGDR
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Runtime.Remoting
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    ----------------------------------------
    System.Data
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    System.Data.DataSetExtensions
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Data.DataSetExtensions/v4.0_4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll
    ----------------------------------------
    System.Numerics
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    Accessibility
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------
    HelpersSmallEd
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Users/GuentheK/Desktop/Programming/TaskForce/BE TaskForce/BE TaskForce/bin/Debug/HelpersSmallEd.DLL
    ----------------------------------------
    System.Transactions
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
    ----------------------------------------
    System.EnterpriseServices
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
    ----------------------------------------

    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.

    For example:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.


    Mir ist auch aufgefallen, dass wenn ich die kompilierte .exe (aus dem Debug/Release Ordner) starte, die Exception ja scheinbar doch gefangen wird, da meine Messagebox angezeigt wird?!
    Eben hinter diesem .Net Fehlerfenster (das mit dem Detailsknopf).
    Wieso wird bei kompilierter .exe die Messagebox angezeigt, aber wenn ichs aus dem Visual Studio heraus per F5 starte nicht?!
    PS: Wenn die .exe gestartet ist, und die Messagebox/.Net Fehlerbox angezeigt wird, freezt die nach ca 5 Sekunden für ein paar Sekunden, danach kann ich sie wieder bewegen, bzw. die Buttons klicken O.o
    Danke!

    Grüße,
    Kevin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Viercnt“ ()

    Viercnt schrieb:

    mein gesamtprojekt abschmieren.

    RodFromGermany schrieb:

    sieh Dir den Output an, was und ggf. wo es endet, das Studio stellt ggf. den Cursor auf die Zeile, wo es knallt, wenn die Exception nicht gefangen werden kann.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    sieh Dir den Output an, was und ggf. wo es endet, das Studio stellt ggf. den Cursor auf die Zeile, wo es knallt, wenn die Exception nicht gefangen werden kann.


    Wie gesagt, ich versteh grad leider nicht genau, was ich tun soll...

    Hab grad den Try...Catch... Block mal auf eine spätere Sub, die mit Me.TaskDBTableAdapter.CountOwner(Environment.UserName), einer count sql Operation, arbeitet gelegt, da wird die erste Exeption geworfen, die auch angezeigt wird (bevor meine Form überhaupt sichtbar wird, was ja so der Sinn sein soll).
    Problem nur, wesswegen auch immer wird der Programmablauf nicht unterbrochen und durch meinen Timer werden nach 10 Sekunden nochmals zwei(!) der selben Messageboxen aufgerufen :D
    Sollte das Programm nicht pausieren, wenn eine Exception geworfen wird?
    Danke!

    Grüße,
    Kevin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Viercnt“ ()

    Viercnt schrieb:

    pausieren
    Nicht, wenn das Programm in mehreren Threads läuft.

    RodFromGermany schrieb:

    Kann es sein, dass die Exception in einem anderen Thread geworfen wird?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du hast es programmiert. Parallel.For zum Beispiel, Task.xxx und solch..
    Falls Du eine externe DLL nutzt, kann die auch mehrere Threads starten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!