У меня есть приложение VB silverlight, которое станет карточной игрой.Я пытался заставить отдельные карты (которые я создаю программно, как элементы управления «Изображение» Silverlight, обернутые в их собственный класс «CardImage») перемещать при наведении.Я хочу, чтобы они как бы «всплыли», когда мышь над ними, а затем снова опустились, когда мышь уходит.
По сути, я перемещаю Image.Margin.Высок на 5 пикселей при наведении мыши,и на 5 пикселей меньше при событиях отпускания мыши.
Я испытывал это страшное «необработанное исключение» в отношении недопустимого межпоточного доступа, и, выполнив домашнюю работу, я узнал о потоке пользовательского интерфейса в сравнении с рабочим потоком и т. д.и попытались применить на практике весь метод "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 карт по ширине).Пожалуйста, имейте в виду, что игроки могут в конечном итоге делать такие вещи ... и я действительно не хочу, чтобы приложение рухнуло, потому что какой-то пользователь с СДВГ решает, что он хочет, чтобы карты пульсировали и "делали волну" снова и снова,с нетерпением ожидая, пока другие люди начнут разыгрывать свои карты.
Есть ли какие-либо подсказки относительно того, почему мой поток пользовательского интерфейса все еще не принимает поток, обновляющий поля изображения?