Imports System.IO

Public Class ExceptionTester

    Private Sub cmdThrow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdThrow.Click
        Dim FileLine As String
        Dim FileStream As System.IO.StreamReader


        Try
            ' Ten kod może spowodować wystąpienie problemu... 
            ' does_not_exist to plik, którego nie ma.
            FileStream = System.IO.File.OpenText("does_not_exist.txt")
            FileLine = FileStream.ReadLine()

        Catch MyError As Exception
            ' Jeśli wystąpi błąd znajdziemy się tu.

            DisplayError(MyError)

        Finally
            ' A tu znajdziemy się zawsze, bez względu na to, co się stało.
            If Not FileStream Is Nothing Then
                FileStream.Close()   ' Zamknięcie pliku.
            End If
        End Try

    End Sub


    Private Sub cmdThrowCustom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdThrowCustom.Click

        ' Nieprowidłowe dane.
        Dim IsPetOwner As Boolean = False     ' jest właścicielem psa? - nie.
        Dim PetBreed As String = "Daschund"   ' rasa psa, jak pudel, tylko większy.  

        Try
            Dim MyError As New ConflictingDBDataException("Problem z psem.")
            MyError.InvalidFields.Add("IsPetOwner", IsPetOwner)
            MyError.InvalidFields.Add("PetBreed", PetBreed)
            Throw MyError
        Catch MyError As ConflictingDBDataException
            DisplayError(MyError)
            MessageBox.Show("Liczba nieprowidłowych porcji danych: " & MyError.InvalidFields.Count)
        End Try

    End Sub

    Private Sub DisplayError(ByVal Err As Exception)
        Dim Spacer As New String("-", 150)
        Spacer = vbNewLine & Spacer & vbNewLine

        Dim Message As String
        Message = "Rodzaj wyjątku - Exception Type" & Spacer
        Message &= Err.GetType().ToString() & vbNewLine & vbNewLine
        Message &= "Komunikat" & Spacer
        Message &= Err.Message & vbNewLine & vbNewLine
        Message &= "Śledzenie stosu - Stack Trace" & Spacer
        Message &= Err.StackTrace

        MessageBox.Show(Message, "Wystąpił wyjątek.")

    End Sub

    Private Sub cmdFail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFail.Click
        Dim Balance As Integer = 0

        ' This is false, which means the assertion will fail.
        ' To fałsz, co oznacza, że asercja nie jest spełniona. 
        Debug.Assert(Balance > 0)
    End Sub

    Private Sub cmdDebug_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDebug.Click

        Dim i As Integer
        Dim Info() As String = {"To", "jest", "tylko", "prosty", "test", "okna", "diagnostycznego", "debug", "output", "window.", ""}
        For i = 0 To 10
            Debug.WriteLine("Liczba iteracji " & i.ToString & ". Odczyt: " & Info(i))
        Next i
    End Sub

    Private Sub cmdTrace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTrace.Click

        ' Jeśli taki plik istnieje, zostanie usunięty.
        Trace.Listeners.Clear()
        If File.Exists("c:\output.txt") Then
            File.Delete("c:\output.txt")
        End If

        ' Inicjowanie pliku rejestru.
        Dim FileListener As New TextWriterTraceListener(File.Create("c:\output.txt"))
        Trace.Listeners.Add(FileListener)
        Trace.AutoFlush = True

        ' Śledzenie.
        Trace.WriteLine("Start aplikacji")
        Trace.Indent() ' To dobry przykład prowidłowo zorganizowanego wyjścia.
        Trace.WriteLine("Wykonuje jakieś zadania . . .")
        ' To można dodać jakiś kod.
        Trace.WriteLine("Zakończyłem wykonanie zadania.")
        Trace.Unindent()
        Trace.WriteLine("Wykonane.")

        ' To zazwyczaj wykonuje się na końcu programu.
        Trace.Listeners(0).Close()

        MessageBox.Show("Plik rejestru - Log utworzono jako c:\output.txt.")

    End Sub

    Private Sub cmdThrowUnhandled_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdThrowUnhandled.Click
        Throw New ApplicationException( _
         "To powinno spowodować zakończenie aplikacji, chyba że " & _
         "nieobsługiwany wyjątek UnhandledException application event zostałby obsłużony.")
    End Sub
End Class

