Jump to content


- - - - -
VS 2013

Application.exitthread() Vs Application.exitt

VS2015

  • Please log in to reply
Er zijn 6 reacties in dit onderwerp

#1 mesut

mesut

    Starting Developer

  • Leden
  • 14 Berichten
    Last Visit 24 Aug 2020 13:11

Geplaatst op 20 April 2020 - 13:27

Beste VBIB'rs

wat is het verschil tussen Application.ExitThread() en Application.Exit .
ben namelijk bezig met een errorhandling ,bij het fouten lopen tijdens schrijven naar database wil ik een msgbox weergeven en dan direct de applicatie afsluiten , maar probleem is dat de foutmeldingen
blijven komen...


    Catch ex As System.Data.SqlClient.SqlException                                
            Timer1.Stop()
    MyConn.Close()
    Application.ExitThread()
    MsgBox(ex.Number & "Err:" & ex.Message)
    Form1.Close()

    End Try

Groetjes Mesut

#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1,200 Berichten
    Last Visit
  • LocatieGent

Geplaatst op 20 April 2020 - 17:42

Bericht bekijkenmesut, op 20 April 2020 - 13:27, zei:

ben namelijk bezig met een errorhandling ,bij het fouten lopen tijdens schrijven naar database wil ik een msgbox weergeven en dan direct de applicatie afsluiten , maar probleem is dat de foutmeldingen
blijven komen...


Catch ex As System.Data.SqlClient.SqlException
Timer1.Stop()
MyConn.Close()
Application.ExitThread()
MsgBox(ex.Number & "Err:" & ex.Message)
Form1.Close()

End Try

Je probleem is niet het verschil tussen Application.Exit en Application.ExitThread, maar de stuctuur van je code.
Dit kan nooit goed gaan.

Verder te weing info om te helpen:
  • Waar staat deze code?
  • Hoe wordt deze code aangeroepen?
  • Hoe wordt deze applicatie opgestart?
  • Is Form1 het Application MainForm?
  • Wat is dat met Timer1?


#3 mesut

mesut

    Starting Developer

  • Leden
  • 14 Berichten
    Last Visit 24 Aug 2020 13:11

Geplaatst op 21 April 2020 - 13:02

Bedankt voor uw reactive Dirk ,

form1 is inderdaad de mainform... in die form1. wordt de onderstaande code opgeroepen ..in een timer (om de 2 seconden ) , als ik de ethernet kabel uittrek , dan wil ik dat foutmelding opvangen ...
soms lukt het soms niet , meestal niet eigelijnlijk.. dan krijg ik foutmeldingen continue (popup's) programma hangt..ik heb de try catch ook gezet in de timer.tick en de timouts van de sqlconnectie en command aangpast ,
maar zonder resultaat..het lijkt alsof dat vb zelf deze popup weergeeft , ook al gebruik ik niet de try catch..

' Internet Ticket number
Function fctKlantaanmaken_ITnumber_DB(ByVal IT_Number As String, ByVal IDRRN As String, ByVal Data As String, ByVal IndexA As Integer, ByVal indexB As Integer) As Integer
Try
  
If MyConn.State = ConnectionState.Closed Then
MyConn.ConnectionString = connString
MyConn.Open()
End If
Dim Sqlstr = "INSERT INTO IDE_IT" & IT_Number & " ([ID], [Data] ,[IndexA] ,[IndexB] " & _
")" & _
   "VALUES (" & "@ID , @Data ,@IndexA, @IndexB )"

Dim Command = New SqlCommand(Sqlstr, MyConn)

Command.Parameters.AddWithValue("@ID", IDRRN)
Command.Parameters.AddWithValue("@IndexA", IndexA)
Command.Parameters.AddWithValue("@IndexB", indexB)
Command.Parameters.AddWithValue("@Data", Data)


da.InsertCommand = Command
da.InsertCommand.ExecuteNonQuery()
da.Dispose()
Command.Dispose()

' Command.ExecuteNonQuery()
'  da.Fill(ds)

MyConn.Close()
fctKlantaanmaken_ITnumber_DB = 1

Catch ex As SqlException   '-2147467259   As System.Data.SqlClient.SqlException  
MyConn.Close()
   Timer1.Stop()
MsgBox("Foutmelding1:" & ex.Message)

  
Form1.Close()

End Function


eerst krijg ik dit bij onderbreken van de connectie..

Bijgevoegde Bestanden

  • Bijlage  1.png   4.04K   0 Aantal bijlagen
  • Bijlage  2.png   9.65K   0 Aantal bijlagen


#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1,200 Berichten
    Last Visit
  • LocatieGent

Geplaatst op 22 April 2020 - 12:07

Dit roept alleen meer vragen op.
Waaarom in een Timer om de 2 seconden?

Dat alleen lijkt me al bricolage.

Maar goed, als je dat echt wil stel ik volgende werkwijze voor:
  • Bij entry van de timer eventhandler als eerste de timer disabelen.
    Waarom? Het openen van een connectie duurt langer dan twee seconden als het niet lukt.
    Dus terwijl jij nog aan het wachten bent op het proberen openen van de eerste connectie, komt de volgende poging er al aan (en ook tijdens die poging komen er nog nieuwe pogingen aan.)
  • Probeer weg te schrijven in de timer event handler (na disabelen) via een method.
    Vang de fout NIET af in die method, maar in de timer event handler zelf.
    Waarom? Omdat je in de schrijfmethod nog niets kan repareren / beslissen.
  • Als 2. goed gaat: timer terug enabelen
  • Als 2. fout ging: kom je in de except van je try...except in de timer event handler en doe je iets met de fout:
    nog eens proberen, of je programma stoppen (wat ik hoe dan ook al een vreemde actie vind) of vragen aan de gebruiker wat er moet gebeuren als die er is (en daar ga ik van uit vermits het een windows forms programma is) of een sms of mail sturen naar een operator of ....
Algemeen:
  • gebruik het USING statement om resources vrij te geven
  • maak je database componenten 1 maal aan en hergebruik ze i.p.v. ze telkens opnieuw te creëren
  • geef al je elementen een echte naam
  • spreek nooit de Form properties  van je applicatie rechtstreeks aan (Form1 bijvoorbeeld)
Bijvoorbeeld met volgende code (eerst gewoon runnen, dan het disabelen van de timer uitcommentariëren)

Visual Basic Code:
Private Sub TimerSchrijven_Tick(sender As Object, e As EventArgs) Handles TimerSchrijven.Tick
TimerSchrijven.Enabled = False
Try
	 SchrijfNaarDatabank()
Catch ex As Exception
	 If MessageBox.Show(ex.Message, "Stoppen?", MessageBoxButtons.YesNo) = DialogResult.Yes Then
		 Close()
		 Return ' timer niet meer enabelen
	 End If
End Try
TimerSchrijven.Enabled = True
End Sub

Private Sub SchrijfNaarDatabank()
' Als dit fout loopt gaat de fout naar boven, maar wordt eerst de writer opgeruimd
Using writer As TextWriter = File.CreateText("log.txt")
	 writer.WriteLine("Het is vier uur.")
	 Throw New InvalidOperationException("Mesut heeft de kabel weer uitgetrokken")
	 writer.WriteLine("De bijl van oom.")
	 writer.WriteLine("Het schip is op zee.")
End Using
End Sub



Veranderd door Dirk Andries, 22 April 2020 - 14:43


#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1,200 Berichten
    Last Visit
  • LocatieGent

Geplaatst op 22 April 2020 - 12:10

Bericht bekijkenDirk Andries, op 22 April 2020 - 12:07, zei:

Bijvoorbeeld met volgende code (eerst gewoon runnen, dan het disabelen van de timer uitcommentariëren)
Zet Timer interval op bv 200 ms.

#6 mesut

mesut

    Starting Developer

  • Leden
  • 14 Berichten
    Last Visit 24 Aug 2020 13:11

Geplaatst op 22 April 2020 - 12:49

Hartelijk bedankt ! hehe Mesut heeft weer :) ik zal het vanavond testen .. moet ik iets doneren ?

#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1,200 Berichten
    Last Visit
  • LocatieGent

Geplaatst op 22 April 2020 - 14:53

Bericht bekijkenmesut, op 22 April 2020 - 12:49, zei:

.. moet ik iets doneren ?
Haha, neen.
Maar je kan je appreciatie voor een bepaald post uitdrukken met de vind-ik-leuk knop:


VindIkLeuk.png





Also tagged with one or more of these keywords: VS 2013, VS2015

0 gebruiker(s) lezen dit onderwerp

0 leden, 0 gasten, 0 anonieme gebruikers

Sign In


[VS 2013] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)