7
votes

Comment utiliser Essayer d'essayer de réessayer une opération dans vb.net?

J'aimerais lire à partir d'un fichier et si j'échoue, laissez l'utilisateur réessayer ou d'abandonner autrement. Jusqu'à présent, le code ressemble à ceci:

Read_Again:
    Try
        my_stream.Read(buffer, 0, read_len)
    Catch ex As System.IO.IOException
        If MessageBox.Show("try again?") = DialogResult.Retry Then
            GoTo Read_Again
        Else
            Application.Exit() 'just abort, doesn't matter
        End If
    End Try


1 commentaires

+1 surtout pour votre ambition de se débarrasser du goto. :)


3 Réponses :


10
votes
Dim retry as Boolean = True
While retry
   Try
      my_stream.Read(buffer, 0, read_len)
      retry = False
   Catch ex As System.IO.IOException
       If MessageBox.Show("try again?") = DialogResult.Retry Then
           retry = True
       Else
           retry = False
           Application.Exit() 'just abort, doesn't matter
       End If
   End Try
End While

2 commentaires

Mais si la lecture réussit, cela continuera à jamais! C'est différent du code avec le goto


Ou vous pouvez simplement vous réessayer à FALSE et changer la boucle à une nouvelle tentative



2
votes

Je séparerais les logiques en une seule fonction de lecture qui retourne true ou false en fonction du résultat de la lecture, puis manipulez les logiques de tentatives à l'extérieur de cette méthode.

Par exemple P>

Function performOneRead(buffer) as Bool
   Try      
     my_stream.Read(buffer, 0, read_len) 
     return true 
   Catch ex As System.IO.IOException    
     return false       
 End Try
End Function


Sub ReadLogics()
 Dim ok as Bool

 While Not Ok
   ok = performOneRead(buffer)
   if not ok AndAlso MessageBox.Show("try again?") <> DialogResult.Retry then Application.Exit(1)
 End While 
end sub


0 commentaires

3
votes

J'ai pensé à une autre réponse:

Do
    Try
        my_stream.Read(buffer, 0, read_len)
        Exit Do
    Catch ex As System.IO.IOException
        If MessageBox.Show("try again?") <> DialogResult.Retry Then
            Application.Exit() 'just abort, doesn't matter
        End If
    End Try
Loop


1 commentaires

Tout cela, c'est apporter une boîte de message avec un bouton "OK". Cela ne devrait-il pas être un oui ou non?