处理Windows Mobile Click事件,以便在程序阻塞时不会“排队”

时间:2010-03-23 09:11:19

标签: click windows-mobile-6 windows-mobile

我为WinMo 6.x编写了一个简单的应用程序来娱乐我的女儿。它拥有一组动物图像到动物噪声对,并随机显示其中一个图像。点击图像时会播放动物噪音,两岁时会分心:-)然后会显示下一张图像。

然而,由于她倾向于在屏幕上猛击,实际的流程是图像显示并且她点击了几次;播放了几种动物噪音,然后图像变为下一个随机动物。

我的猜测是操作系统在程序阻塞时排队点击事件,因为它会播放噪音,然后尽快处理它们。与您在机器挂起时进行打字的方式大致相同,当所有内容再次清除时,文本会显示。

因此表单有两个变量

Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject

ObjectStore是一个围绕List(Of RealWorldObject)的包装类,它有一个getNextObject方法,该方法返回一个随机的RealWorldObject,它检查了最近没有返回的particluar对。

以我们的形式......

Private Sub picBox_Click(ByVal sender As Object, ByVal e As EventArgs)
            RemoveHandler picBox.Click, AddressOf picBox_Click
            picBox.BackColor = Color.Gray
            If currentObject.getSoundLocation() <> "" Then
                currentObject.playSound()
                refreshScreen()
            End If
End Sub

Private Sub refreshScreen()
    picBox.Image = Nothing
    currentObject = thisCollectionOfThings.getNextObject()
    If Not currentObject Is Nothing Then addImage()
    AddHandler picBox.Click, AddressOf picBox_Click
End Sub

Private Sub addImage()
    picBox.Image = New Bitmap(currentObject.getImageLocation())
End Sub

您可以看到我尝试删除事件处理程序以尝试避免点击排队问题,但它无效。

任何有关如何避免这种情况的建议都会受到高度赞赏...否则我会尝试在图片框控件周围编写自己的包装器来尝试处理点击但是我不愿意浪费我的时间,如果有人其他人的经验表明这无济于事。

1 个答案:

答案 0 :(得分:1)

我是为了简单(KISS):

  1. 使用名为“IsPlaying”之类的布尔值,并在播放声音之前将其设置为true,并在完成之后将其设置为false。
  2. 将音频播放到后台线程中,以便UI保持响应。
  3. 如果该布尔值为true,则忽略点击处理程序中的屏幕点击。