我有一個將成爲紙牌遊戲的VB silverlight應用程序。我一直在嘗試獲取單張卡片(我以編程方式創建了Silverlight「Image」控件,並將它們封裝在自己的「CardImage」類中),以便在蒙上陰影時移動。我希望它們在鼠標移到它們上面時彈出,然後在鼠標離開時放下。silverlight中的無效跨線程異常
本質上,我將鼠標移動上的Image.Margin.Top上移5個像素,並在mouseleave事件上下移5個像素。
我一直在遇到有關無效跨線程訪問的可怕「未處理異常」,並且完成了我的作業,我已經瞭解了UI線程與工作線程等,並試圖將整個「begininvoke 「在練習中變得更安全。
以下是問題:異常仍在發生。
這裏是我的代碼:
Public Class CardImage
Public Disp As Dispatcher = Deployment.Current.Dispatcher
Public WithEvents Image As New Image
Private Sub MouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Image.MouseEnter
Try
Invoke(Sub() Image.Margin = New Thickness(Image.Margin.Left, Image.Margin.Top - 5, 0, 0))
Catch ex As Exception
End Try
End Sub
Private Sub MouseLeave(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Image.MouseLeave
Try
Invoke(Sub() Image.Margin = New Thickness(Image.Margin.Left, Image.Margin.Top + 5, 0, 0))
Catch ex As Exception
End Try
End Sub
Private Sub Invoke(ByVal act As Action)
If Disp.CheckAccess Then
act.Invoke()
Else
Disp.BeginInvoke(act)
End If
End Sub
End Class
當我(跨爲13卡的「手」)非常快速移動鼠標在所有所顯示的卡的異常被拋出。請記住,玩家可能最終會做這樣的事情...我真的不希望應用程序崩潰,因爲有些ADHD用戶決定他們希望卡片一遍又一遍地漣漪波動,同時不耐煩地等待其他人玩牌。
任何暗示,爲什麼我的UI線程仍然沒有更新圖像邊距線程?
FYI:我 – 2012-03-19 18:27:05
好吧,我想我的回答是錯誤的,因爲你的方法來自事件處理程序,所以我認爲它們已經在UI線程上了,這就是錯誤仍然發生的原因你是否在另一個線程上編程創建CardImage實例? – Kratz 2012-03-19 18:44:15
@Kratz由於Silverlight主頁上的按鈕點擊事件觸發了卡圖片的創建。按鈕(這只是一個「處理」新測試手的按鈕)創建了所有的CardImage對象,並安排它們。所以你會認爲這將全部在UI線程上。 – 2012-03-19 18:47:07