private void SetNewCard(GetCardEventArgs args) { cardCounterLabel.Text = args.CardInDeck.ToString(); int destX = args.PlayerCards.Length * 40, destY = args.PlayerId == 0 ? 40 : this.Size.Height - 230; animations.AddLast(new CardAnimation(args.NewCard, destX, destY)); }
private void PlayerGetCardHandler(GetCardEventArgs args) { // Данный метод вызывается в потоке gameAccess, так что что бы обратиться к полям формы // необходимо вызывать метод SetNewCard асинхронно в родительском потоке поля // Но также нам необходимо заблокировать текущий поток, что бы игра не продолжалась, // пока не закончится обработка текущего события var result = this.BeginInvoke(new GetCardHandler(SetNewCard), args); this.EndInvoke(result); while (animations.Last() != null && animations.Last().IsPlayed) { ; } }