2016-04-06 18 views
1

私は自分のアプリケーションの厳しいオプションをオンにすることに決めました。そして私の人生のために、小さなコードをコンパイルする方法を理解できませんでした。モジュールでは私の周り見て、私はそれが言ったイベントを処理することで動作するようになったApplicationEventsにそれを置くことについての別のポストを見た後、コード未処理の例外をキャッチする

Sub Main() 
     AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
    End Sub 
    Private Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) 
     e.ExitApplication = False 
    End Sub 

のこのビットを持っていました。だから、好奇心から、私はAddHandler命令を移動することを決めたと同じクラスにし、それはその同じクラス名が異なる名前空間が明らかになった:ここ

Partial Friend Class MyApplication 
    Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
     e.ExitApplication = False 
     AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
    End Sub 

    Private Sub CurrentDomain_UnhandledException(sender As Object, e As System.UnhandledExceptionEventArgs) 
     e.ExitApplication = False 
    End Sub 
End Class 

が両方へのリンクです:

だから私の質問は、私はそのいずれかを使用する必要があり、ありますか?私は、アプリケーションがシャットダウンするのを防ぎたいと思っています...しかし、両方のオプションは私が欲しいもののように思えます。

+0

2番目のコードブロックで、私はあなたが 'MyApplication_UnhandledException'関数内の' AddHandler'を望んでいないと思います。それはあまり意味がありません。それは、(VB)ハンドラが最初に呼び出され、 'CurrentDomain.UnhandledException'ハンドラが2番目だと信じているので動作するかもしれませんが、あまり意味がありません。 –

+1

e.ExitApplicationをFalseに設定すると、何も実行されません。それは11年前に仕事を止めました。気にしないでください。 –

+0

@StuartWhitehouse私が厳重にオンにしたときに問題が頭を抱えていたことを逃したかもしれません。今日まで、このコードは3年以上にわたって喜んで働いてきました。正直なところ、私はそれが今働いたことに驚いています。私が上に投稿したコードは、コンパイラのエラーを非常にはっきりと示しています。私がコードベースで持っていたことをこの時間全体で示すことを意図していません...私は怒っていません。答えでは、私が示しているコードはうまくいくと言われました。 :DI知っている、コンパイラも私に言った –

答えて

1

System.UnhandledExceptionにはExitApplicationのメンバーがありません(リンクしたドキュメントを参照)ので、アプリケーションを終了するのに使用することはできません。終了すると、アプリケーションは常に終了します。一般的に、Microsoft.VisualBasic名前空間は、他の場所で利用可能な多かれ少なかれ重複する機能を持つVBのヘルパーです。あなたが言及しているVisualBasicハンドラに最も近いものはApplication.ThreadExceptionです。これとAppDomain.CurrentDomain.UnhandledExceptionはともにMS docsによく記述されています。

アプリがシャットダウンするのを防ぐには、VisualBasicまたはThreadExceptionのいずれかを使用できます。あなたがやっていることに似た何かを達成するために私は過去にMicrosoft.VisualBasicを使いました。

+0

ええ、私は 'System.UnhandledExceptionEventArgs'には' ExitApplication'が含まれていないことを知っている私はApplicationEventsに移動したコードは、私はSubを追加するVisualStudioに言った私はUnhandledExceptionEventArgsの2つの異なるバージョンに気づいたときです。コピー貼り付けコードが何をしているのかわからずに問題を表示する:D –