按住键时VB6应用程序崩溃

时间:2013-03-06 15:53:48

标签: vb6 crash keypress crash-dumps

我有一个VB6应用程序,其表单通过其KeyPress事件处理输入。在该方法中,它检查通过一系列if语句传递了什么ASCII代码,并运行必要的代码来响应输入。所以,基本格式是:

Private Sub Form_Keypress (KeyAscii As Integer)

If KeyAscii = 97
' Do some stuff

If KeyAscii = 98
' Do some different stuff

End Sub

有24个键连接到键盘编码器,可以从自助服务终端前面的按钮提供输入。操作系统是Windows 7.我遇到的问题是如果我将这些键中的一个按下大约十秒钟,应用程序就会崩溃 - 没有异常,只是停止执行。我确实收集了一些小型转储,我没有看到任何可以提供任何有用信息的内容,但我没有阅读它们的经验。

我需要知道为什么应用程序似乎无法处理按键流以及如何绕过它。

1 个答案:

答案 0 :(得分:5)

我重新编码看起来更像是这样:

Private Sub Form_Keypress (KeyAscii As Integer)
    Static bInKeyPress As Boolean
    If bInKeyPress = True Then Exit Sub

    On Error GoTo Handler

    bInKeyPress = True

    If KeyAscii = 97
        ' Do some stuff

    ElseIf KeyAscii = 98
        ' Do some different stuff

' Everything goes through here, after execution is complete.
' Handler also calls through to this, to make sure we clean up things
ExitPoint:
    bInKeyPress = False
    Exit Sub

'Do any error handling / logging you want, here, then clean things up.
Handler:
    GoTo ExitPoint
End Sub

如果您不希望其他任何东西能够重置变量,请在Sub内部使用静态变量,并且只有在处理完成时才会切换回False。如果您认为其他内容应该能够控制是否需要启用Keypress功能,请在模块级别使用私有变量。

基本上,你想在处理任何事情时停止听按键操作。


编辑清除此内容以符合评论中的一些建议,并澄清程序流程。