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. :)