我经常在我的VB6应用程序中遇到这种情况。
Private Sub DoSomething
On Error Goto err1
Call ProcessLargeBatch1
Call ProcessLargeBatch2
'... more ...'
Exit Sub
err1:
Call Cleanup 'Specific for DoSomething'
Call HandleError 'General error handling: Logging, message box, ...'
End Sub
清理过程有时会还原操作、回滚事务、删除临时文件等。在大多数情况下,此操作也可能失败。
在这种情况下我该怎么办?我可以在错误处理程序中添加 On Error Resume Next
但这将删除现有的 Err
对象。将错误处理程序添加到 Cleanup
也有同样的问题。
保证原始错误仍然得到处理/记录的最佳方式是什么?
编辑:另外一个问题是我想通知用户发生了错误。有时很重要清理快速完成,并且不希望消息框长时间阻塞应用程序,只有用户确认错误后才执行清理。