Я написал простое приложение для WinMo 6.x, чтобы развлечь мою дочь.Он содержит набор изображений животных для пар шумов животных и случайным образом отображает одно из изображений.При нажатии на изображение звуки животных воспроизводятся, а двухлетний ребенок отвлекается :-), а затем отображается следующее изображение.
Однако, поскольку она стремится ударить по экрану, фактическим потоком является то, что изображениепоказывает и она щелкает несколько раз;воспроизводится несколько звуков животных, а затем изображение меняется на следующее случайное животное.
Я предполагаю, что ОС ставит в очередь события щелчка, в то время как программа блокирует, так как она воспроизводит шум, а затем обрабатывает их, как толькооно может.Почти так же, как вы можете продолжать печатать, когда ваша машина зависает, и текст отображается, когда все снова очищается.
Таким образом, форма имеет две переменные
Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject
ObjectStore - это класс-оболочкавокруг списка (Of RealWorldObject), в котором есть метод getNextObject, который возвращает случайный объект RealWorldObject, проверивший, что определенная пара не была возвращена недавно.
В форме, которую мы имеем ...
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
Вы можете заметить, что я прибег к попытке удалить обработчик событий, чтобы попытаться избежать проблемы с очередью кликов, но она не работает.
Любой совет о том, как этого избежать, был бы очень признателен... В противном случае я попытаюсь написать свою собственную обертку вокруг элемента управления графическим блоком, чтобы попытаться обработать щелчок, но я не хочу тратить свое время, если чужой опыт подсказывает, что это не поможет.