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
3 Réponses :
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
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
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
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
Tout cela, c'est apporter une boîte de message avec un bouton "OK". Cela ne devrait-il pas être un oui ou non?
+1 surtout pour votre ambition de se débarrasser du goto. :)