2016-05-11 49 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仍然会被执行。

相关问题