2016-05-11 48 views
0

我有VB.NET應用程序,有一個BackgroundWorker,使MySQL數據庫的操作;如果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

該應用程序獨立工作,沒人看;我需要應用程序自行恢復。該應用程序單獨運行一年沒有任何問題,但是當崩潰進入循環並且一直運行錯誤大約3天,直到有人注意到它;然後我手動關閉它,並再次工作好像什麼都沒有發生過。 –

回答

0

如果調用Application.Restart,FormClosing事件將從同一個線程中調用Restart被調用。所以如果你訪問任何UI元素,你需要調用Form.Invoke來安全地訪問它們的屬性。

要回答你的問題,是FormClosing會被調用。另外,我會將這些WriteRTBLog調用包裝在他們自己的Try/Catch中,這樣如果他們的調用失敗,Application.Restart仍然會被執行。

相關問題