Application.DoEvents()CheckBox Bug(VB)

时间:2016-10-22 00:31:25

标签: vb.net visual-studio

当(神模式)运行时我在运行我的应用程序时遇到问题...我在网上发现,这似乎是一个常见的错误。修复是将Application.DoEvents()置于循环中,我做了...但是现在每次我打开上帝模式,CheckBoxes出错,当他们被点击时他们激活...程序不会停止响应,但程序需要两次点击才能直观地显示它是否有效:

完整代码:

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    If CheckBox1.Checked = True Then
        Do
            Application.DoEvents()
            WriteDMAInteger("Dishonored", GetModuleHandle("Dishonored", "Dishonored.exe") + &H100C810, {&H344}, 70, 1, 4)
        Loop Until CheckBox1.Checked = False
    End If
End Sub

任何想法或解决方案?

1 个答案:

答案 0 :(得分:0)

正如评论所示,不要使用Application.DoEvents()这比它的价值更麻烦。相反,请使用计时器。

从工具箱中将Timer控件拖到窗体上。将其Interval属性设置为合适的属性(如100毫秒)。添加Tick事件并在该事件中调用WriteDMAInteger方法。在复选框的更改事件中,只需启用或禁用计时器:

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    'Enables the time if the checkbox is checked
    Timer1.Enabled = CheckBox1.Checked
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    WriteDMAInteger("Dishonored", GetModuleHandle("Dishonored", "Dishonored.exe") + &H100C810, {&H344}, 70, 1, 4)
End Sub

将定时器的间隔设置为100 ms,WriteDMAInteger方法将每秒调用10次。对于间隔,您可以尝试使用小于100的值,但限制将是大约50毫秒。