我已經寫了的Windows Mobile 6.x的一個簡單的應用程序來招待我的女兒。它擁有一組動物圖像以及動物噪聲對,並隨機顯示其中一幅圖像。當圖片被點擊時,動物噪聲會播放,兩歲的孩子會分心:-)然後顯示下一張圖片。處理Windows Mobile的Click事件,使其不「排隊」,而我的程序阻止
然而,因爲她往往在屏幕打壞實際流量是圖像顯示和她點擊數次;播放幾個動物噪聲,然後圖像變成下一個隨機動物。
我的猜測是,操作系統正在排隊的點擊事件,而該計劃是阻止,因爲它扮演的噪音,然後只要它能夠處理它們。就像您可以在機器掛起時進行打字一樣,而當一切再次清除時文本都會顯示。
所以窗體上有兩個變量
Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject
ObjectStore的是圍繞一個列表(中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
你可以看到我已經使出嘗試刪除的事件處理程序,以儘量避免點擊排隊問題,但它無法正常工作。
任何關於如何避免這種情況的建議將被超讚賞......否則,我會嘗試在圖片框控件周圍編寫我自己的包裝來嘗試處理點擊,但我厭惡用盡我的時間if別人的經驗表明,這將無濟於事。
對不起,本來應該更清晰......我最初的做法是正是......但我與添加/刪除處理時不工作取而代之。 我想你是對的,我應該把音頻放入一個單獨的線程,而不是懶惰。 其實我猜你是完全正確的。由於我的猜測是這個問題是由於UI沒有反應,我應該修復這個問題。 – 2010-03-23 18:47:53
如果沒有線程,布爾值將不會執行任何操作,因爲操作系統會將點擊事件排在您的應用程序之前的很長時間。刪除事件處理程序沒有用處也是一樣的原因。 – ctacke 2010-03-23 19:53:08
昨晚在線程中彈出,它幾乎解決了這個問題。多次點擊的尾巴仍然被挑選出來(我猜測用戶界面在從線程中取回控制時會暫時阻止),所以我添加了一個定時器,當線程返回時自動停止並將isPlaying標誌設置爲false 。我現在想要的一切都很快。謝謝你提醒我KISS – 2010-03-29 12:05:25