2011-06-22 9 views
7

私はファイルから読んでみたいと思います。失敗したら、ユーザーに再試行または放棄させてください。これまでのコードは次のようになっています:VB.Netで操作を再試行するにはTry and Catchを使用するにはどうすればよいですか?

私は後藤が好きではありません。醜いです。しかし、私はtryとcatchにまたがるループを作る方法は分かりません。

これを書き込むより良い方法はありますか?

+0

+1は主にあなたの野望を取り除くためのものです。 :) – Guffa

答えて

8
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 
+1

しかし、読み込みが成功すれば、これは永遠に続きます!それはgoto – Eyal

+0

@Eyalとのコードとは異なります。一定! –

+1

また、再試行をfalseに再試行して、ループをdo-while-retryに変更することもできます。 – Eyal

2

Iは、読み出しの結果に応じて、trueまたはfalseを返すと、その方法の外に再試行ロジックを扱う1つの読み出し機能にロジックを分離することになります。

は例

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 
3

のために私は別の答えを考えた:

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 

出口はしかし、基本的に変装して後藤です。このようにして、大きなスコープを持つ別の変数は必要ありません。

+0

これはメッセージボックスに「ok」ボタンを表示することだけです。これははいかいいえではないでしょうか? –

関連する問題