Gestire Windows Mobile evento Click in modo che non è così “coda”, mentre il mio programma sta bloccando

StackOverflow https://stackoverflow.com/questions/2498609

Domanda

Ho scritto una semplice applicazione per WinMo 6.x per intrattenere mia figlia. Contiene un set immagine Animale a coppie rumore di animali e visualizza in modo casuale una delle immagini. Quando l'immagine viene cliccato il rumore degli animali gioca e il bambino di due anni è :-) distratto e poi viene visualizzata l'immagine successiva.

Tuttavia, dal momento che tende a colpire lo schermo del flusso effettivo è che l'immagine viene visualizzata e fa clic più volte; molti versi degli animali sono giocati e poi l'immagine cambia a quella successiva animale casuale.

La mia ipotesi è che il sistema operativo è in fila gli eventi click, mentre il programma sta bloccando in quanto svolge il rumore e poi elaborarli non appena possibile. Più o meno allo stesso modo in cui si può portare avanti la digitazione, mentre i vostri computer si blocca e il testo viene visualizzato quando tutto cancella di nuovo.

Quindi, la forma ha due variabili

Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject

ObjectStore è una classe wrapper per un elenco (Of RealWorldObject) che ha un metodo che restituisce un getNextObject RealWorldObject casuale aver controllato che coppia particluar non è stato restituito di recente.

Nella forma che abbiamo ...

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

Si può vedere che ho fatto ricorso al tentativo di rimuovere il gestore di eventi per cercare di evitare lo scatto in fila problema, ma non funziona.

Qualche consiglio su come evitare questo sarebbe super-apprezzato ... Altrimenti cercherò scrivere il mio wrapper per il controllo casella di immagine per cercare di gestire il clic, ma io sono restio a usare il mio tempo se qualcuno l'esperienza di un altro suggerisce che non aiuterebbe.

È stato utile?

Soluzione

mi piacerebbe andare per semplicità (KISS):

  1. Usa un valore booleano chiamato qualcosa come "isPlaying" e impostarlo su true destra prima di giocare il suono e il falso dopo il gioco è fatto.
  2. Mettere l'audio giocare in un thread in background in modo da l'interfaccia utente rimane reattivo.
  3. Se questo booleana è vero, ignorare tocchi dello schermo nel gestore di click.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top