0

これはデバッガーの問題かもしれませんが、次のようになります。

私はこのコードを持っています:

Private Function Connect() As Boolean
    Try
        sessionBegun = False
        connectionOpen = False

        rp = New RequestProcessor2()

        rp.OpenConnection2("","EZSystem", QBXMLRPConnectionType.localQBD) 

        connectionOpen = True 
        ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare)
        sessionBegun = True 

        Return True
    Catch e As COMException
        exceptionHandler.HandleConnectionException(e)
        **Throw New QuickBooksConnectionException(e.Message)**
    End Try
End Function

私の意図は、低レベルの例外をより意味のあるものに「変換」することなので、自分で作成した例外をスローします。私はこれを処理できる場所まで泡立たせたいと思っています。

ただし、デバッガーが壊れて、「QuickBooksConnectionException」タイプの例外がスローされたことが通知されます。

私はそれを知っています、私はちょうどそれを投げました、なぜあなたはそれをキャッチしていますか?

私が読んだことから、これは機能するはずであり、類似の Java throws キーワードがないように見えるので、おそらくそれは私のデバッガーです。

SharpDevelop を使用しています。

ありがとう、デーン

4

3 に答える 3

1

書かれているように、コードは未処理の例外をスローし、これは常にデバッガーをボークさせます。このメソッドを呼び出すコードでQuickBooksConnectionExceptionをキャッチするだけです。(そして、その通りです。C# には、 throws Java キーワードに相当するものはありません。)

于 2012-05-13T01:06:42.657 に答える
1

デバッガーが例外で中断するタイミングの設定を変更できます。

こちらをご覧ください。

于 2012-05-13T02:16:03.703 に答える
0

これは、デバッガーがその仕事をしているだけです。通常、未処理の例外をキャッチします。あなたのコードは正常に動作していると思います。おそらく混乱しているのはデバッガです。

何が起こっているかを示すための実験があります。Try-Catch ブロックを完全に削除します。コードを実行して COMException を発生させます。デバッガーはそれを「キャッチ」します。これはハンドルされていないためであり、それをスローする行を強調表示します。

例外は、囲んでいる Try ブロックを探してコール スタックをバブルアップします。囲んでいる Try ブロックがない場合は、ランタイムがそれを処理します。つまり、デバッガーで実行している場合、デバッガーはコール スタックを巻き戻して、例外をスローした元の行を表示できることを意味します。例外が発生した理由をデバッグするのに役立ちます。デバッガーを使用せずに、スタンドアロンの EXE または Web サイトから実行してみてください。標準エラー ダイアログで終了します。

デバッガーが例外で中断するかどうかを決定するルールを次に示します。

于 2012-05-13T13:45:37.913 に答える