如果应用程序崩溃,执行代码?
问题描述:
在Visual Basic 6.0(VB6)中的一个小问题如果应用程序崩溃,执行代码?
假设我错过了一种可能的情况,并且用户做了一些事情并没有想到,那么他会得到一个错误,导致应用程序崩溃。有没有我可以使用的事件会执行某些代码,如果发生这种情况?
尝试Form_Terminate \ Unload \ Query_Unload,没有太多的运气。
崩溃: AKA运行时错误。
答
您可以在任何级别添加On Error
支票,包括您的Sub Main
。任何未在该功能级别进行错误检查的错误将通过调用堆栈上升到主/初始方法,您可以在那里捕获它们。
然后,您可以优雅地显示错误(以便您或您的用户知道它),然后在此时恢复任何最佳方法。而且,请记住,您可以在几个不同的战略级别和位置执行此操作。
如果错误发生在事件过程中,那么这些错误不会被困在Sub Main()
中,因此您还需要在那里捕获它们。
任何出现在堆栈顶部的错误(出自Sub Main()
或事件过程)都将被运行时捕获并且是致命的。您的代码将不会收到通知。
您可能也希望发布Good Patterns For VBA Error Handling。
答
关于在VB6中频繁捕获错误的方法是通过使用On Error
和GOTO
标签。在每个函数开始时,只要在出错时声明goto,并且每当出现错误时,都会执行GOTO部分。
请注意,转到部分应该在方法的末尾,所以在运行代码之后,不会执行其他代码段,而是离开函数。检查下面的例子;
Private Function MyMethod()
Dim sMsg As String
On Error Goto ErrHandler
' ...code here...
Exit Function
ErrHandler:
sMsg = "Error #" & Err.Number & ": '" & Err.Description & "' from '" & Err.Source & "'"
GoLogTheError sMsg
End Function
我假设在碰撞事件日志中没有条目? – rene 2014-09-03 15:37:18
如果没有其他选项是可行的,可以查看http://msdn.microsoft.com/en-us/library/windows/hardware/dn641144.aspx。 – rene 2014-09-03 15:39:03
崩溃=运行时错误。雷内,我已经知道如何处理错误,即时通讯谈论更大的规模,而不是具体的捕捉。 (我总是可以在'错误转到X'或上帝禁止'错误恢复下一个'(又名磁带检查引擎灯)',但如果该错误来自另一段代码,我应该扫描错误并把它放在我编码的每一个事件上? – Stavm 2014-09-03 15:42:46