2016-05-11 7 views
0

私は、MySQLデータベースで操作を行うBackgroundWorkerを持つVB.NETアプリケーションを持っています。 BGWがクラッシュした場合は、ログを保存してアプリケーションを再起動します。このようなことをするのは大丈夫ですか?BackgroundWorkerからアプリケーションを再起動しても問題ありませんか?

Catch ex As Exception  
    WriteRTBLog(ex.Message, Color.Red) 
    WriteRTBLog(ex.StackTrace, Color.DarkRed) 
    Application.Restart() 
End Try 

また、アプリケーションを再起動すると、FormClosingイベントが発生しますか? そのイベントを使用して終了する前にログを保存しています。

+2

私がデータをぶち壊していて、SQL Serverが私を爆破させたら、盲目的に続けようとすると、私ができる最悪のことに思えます。例外が何を意味するのかわからず、回復方法がわからなければ、死ぬでしょう。あなたが回復することができれば、そうしてください。アプリケーション全体を再起動すると奇妙な方法で回復するようです。 – Will

+0

はい、FormClosingイベントが発生します。このコードがDoWorkイベントハンドラにある場合、間違ったスレッドでは、それは良くありません。いつも再起動して直ちにクラッシュするアプリで無力に見ているユーザーについては、何もありません。マシンを再起動するだけです。 RTBがあれば、それはもはや存在しません。これをしない理由の多く。 –

+0

アプリケーションは単独で動作し、誰もそれを監視しません。私は、アプリケーション自体が回復する必要があります。アプリケーションは何の問題もなく1年しか働きませんが、クラッシュがループに入り、誰かに気付くまで約3日間間違っていました。私は手動でそれを閉じて、何も起こっていないように再びokを働かせます。 –

答えて

0

Application.Restartを呼び出すと、再起動された同じスレッドからFormClosingイベントが発生します。したがって、UI要素にアクセスする場合は、プロパティに安全にアクセスするためにForm.Invokeを呼び出す必要があります。

あなたの質問に答えるには、はいFormClosingが呼び出されます。また、自分のTry/CatchでこれらのWriteRTBLog呼び出しをラップして、Application.Restartへの呼び出しが失敗した場合でも実行されます。

関連する問題